使用 Pandas groupby 连接多行中的字符串

新手上路,请多包涵

我想根据 Pandas 中的 groupedby 合并数据框中的几个字符串。

到目前为止,这是我的代码:

 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)

我希望最终结果看起来像这样:

在此处输入图像描述

我不知道如何使用 groupby 并在“文本”列中应用某种字符串连接。任何帮助表示赞赏!

原文由 mattiasostmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 693
2 个回答

You can groupby the 'name' and 'month' columns, then call transform which will return data aligned to the original df and apply a lambda where we join 文本条目:

 In [119]:

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()
Out[119]:
    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

我通过在此处传递感兴趣的列列表来子原始 df df[['name','text','month']] 然后调用 drop_duplicates

编辑 其实我可以打电话 apply 然后 reset_index

 In [124]:

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

Out[124]:
    name  month         text
0  name1     11       hej,du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite

更新

lambda 在这里是不必要的:

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

Out[38]:
    name  month         text
0  name1     11           du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

我们可以按“名称”和“月份”列分组,然后调用 --- agg() Panda 的 DataFrame 对象的函数。

agg() 函数提供的聚合功能允许在一次计算中按组计算多个统计信息。

 df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})

在此处输入图像描述

原文由 Ram Prajapati 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题