首页 > 解决方案 > 使用 pandas GroupBy 聚合字符串列

问题描述

我有一个 DF,如下所示:

df =

vid   pos      value       sente
1     a         A           21
2     b         B           21
3     b         A           21
3     a         A           21
1     d         B           22
1     a         C           22
1     a         D           22
2     b         A           22
3     a         A           22

现在我想将所有具有相同值的行sente合并vid成一行,其中的值value由一个" "

df2 =

vid   pos      value       sente
1     a         A           21
2     b         B           21
3     b a       A A         21
1     d a a     B C D       22
2     b         A           22
3     a         A           22

我想对此进行修改应该可以解决问题:

df2 = df.groupby["sente"].agg(lambda x: " ".join(x))

但我似乎无法弄清楚如何将第二列添加到语句中。

标签: pythonpandasdataframegroup-bypandas-groupby

解决方案


Groupers 可以作为列表传递。此外,您可以通过去掉 lambda 代码来稍微简化您的解决方案——它不是必需的。

df.groupby(['vid', 'sente'], as_index=False, sort=False).agg(' '.join)

   vid  sente    pos  value
0    1     21      a      A
1    2     21      b      B
2    3     21    b a    A A
3    1     22  d a a  B C D
4    2     22      b      A
5    3     22      a      A

其他一些注意事项:指定as_index=False意味着您的分组将作为列出现在结果中(而不是作为索引,默认情况下)。此外,sort=False将保留列的原始顺序。


推荐阅读