首页 >后端开发 >Python教程 >如何使用 Groupby 连接 Pandas 中多行的字符串?

如何使用 Groupby 连接 Pandas 中多行的字符串?

Susan Sarandon
Susan Sarandon原创
2024-12-15 12:17:14532浏览

How to Concatenate Strings from Multiple Rows in Pandas Using Groupby?

使用 Pandas Groupby 连接多行字符串

使用数据帧时,可能存在需要合并多行字符串的情况同时按特定标准对它们进行分组。 Pandas 通过其 groupby 和转换函数为此提供了一个方便的解决方案。

问题陈述

给定一个包含“名称”、“文本”和“月份”列的数据框,”目标是连接“文本”列中“名称”和“月份”的每个唯一组合的字符串。所需的输出是一个具有唯一“名称”和“月份”组合以及连接的“文本”值的数据框。

解决方案

要实现此目的,您可以利用执行以下步骤:

  1. 使用“名称”和“月份”对数据框进行分组groupby() 函数。
  2. 使用 transform() 函数应用连接每个组的“文本”条目的 lambda 表达式。
  3. 要删除重复行,请从结果中删除重复项使用 drop_duplicates() 函数的数据框。

这是一个示例代码:

import pandas as pd
from io import StringIO

data = StringIO("""
"name1","hej","2014-11-01"
"name1","du","2014-11-02"
"name1","aj","2014-12-01"
"name1","oj","2014-12-02"
"name2","fin","2014-11-01"
"name2","katt","2014-11-02"
"name2","mycket","2014-12-01"
"name2","lite","2014-12-01"
""")

# load string as stream into dataframe
df = pd.read_csv(data, header=0, names=["name", "text", "date"], parse_dates=[2])

# add column with month
df["month"] = df["date"].apply(lambda x: x.month)

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()

上面的代码生成一个具有所需结果的数据帧:

    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

替代解决方案

而不是使用transform( ),您也可以使用 apply() 然后使用 reset_index() 来达到相同的结果。更新后的代码将是:

df.groupby(['name','month'])['text'].apply(','.join).reset_index()

这个简化版本消除了 lambda 表达式并提供了更简洁的解决方案。

以上是如何使用 Groupby 连接 Pandas 中多行的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn