使用 Pandas Groupby 连接多行字符串
使用数据帧时,可能存在需要合并多行字符串的情况同时按特定标准对它们进行分组。 Pandas 通过其 groupby 和转换函数为此提供了一个方便的解决方案。
问题陈述
给定一个包含“名称”、“文本”和“月份”列的数据框,”目标是连接“文本”列中“名称”和“月份”的每个唯一组合的字符串。所需的输出是一个具有唯一“名称”和“月份”组合以及连接的“文本”值的数据框。
解决方案
要实现此目的,您可以利用执行以下步骤:
这是一个示例代码:
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中文网其他相关文章!