首页 > 解决方案 > Python,Pandas,DataFrame,添加新列执行 SQL GROUP_CONCAT 等效

问题描述

我的问题与此处提出但未回答的问题非常相似 Replicating GROUP_CONCAT for pandas.DataFrame

我有一个 Pandas DataFame,我想将 concat 分组到一个数据框中

+------+---------+  
| team | user    |  
+------+---------+  
| A    | elmer   |  
| A    | daffy   |  
| A    | bugs    |  
| B    | dawg    |  
| A    | foghorn |  
+------+---------+  

变得

+------+---------------------------------------+  
| team | group_concat(user)                    |  
+------+---------------------------------------+  
| A    | elmer,daffy,bugs,foghorn              |  
| B    | dawg                                  | 
+------+---------------------------------------+  

正如原始主题中所回答的那样,可以通过以下任何方式完成:

df.groupby('team').apply(lambda x: ','.join(x.user))
df.groupby('team').apply(lambda x: list(x.user))
df.groupby('team').agg({'user' : lambda x: ', '.join(x)})

但是生成的对象不再是 aPandas Dataframe了。如何将原始中的 GROUP_CONCAT 结果Pandas DataFrame作为新列?

干杯

标签: pythonpandasdataframe

解决方案


让我们分解下面的代码:

  • 首先,groupby 团队,并apply用户join使用它的元素使用,
  • 然后,重置索引和rename生成的数据框(axis=1, 指的是列而不是行)
res = (df.groupby('team')['user']
       .apply(lambda x: ','.join(str(i) for i in x))).reset_index().rename({'user':'group_concat(user)'},axis=1)

输出:

  team        group_concat(user)
0    A  elmer,daffy,bugs,foghorn
1    B                      dawg

推荐阅读