一次在多列上使用 pandas groupby().apply(list) [重复]

Posted

技术标签:

【中文标题】一次在多列上使用 pandas groupby().apply(list) [重复]【英文标题】:Using pandas groupby().apply(list) on multiple columns at once [duplicate] 【发布时间】:2019-09-30 05:17:24 【问题描述】:

我正在尝试将数据框的多行合并为一行,并将具有不同值的列合并到一个列表中。有多个具有不同值的列。

df.groupby('a')['b'].apply(list) 如果只需要将 1 列(在本例中为“b”)添加到列表中,则效果很好,但我不知道如何为多列执行此操作。

数据框:

   a  b  c       d
0  1  b  1   first
1  1  b  2  second
2  2  c  1   third
3  2  c  2  fourth
4  2  c  3   fifth

首选数据帧发布操作:

   a  b          c                       d
0  1  b     [1, 2]         [first, second]
1  2  c  [1, 2, 3]  [third, fourth, fifth]

有没有简单的方法可以做到这一点?

【问题讨论】:

df.groupby(['a', 'b'])['c', 'd'].agg(list) @Georgy:你甚至不需要指定column。是df.groupby(['a', 'b']).agg(list) 【参考方案1】:
df = df.groupby(['a','b']).apply(lambda x: [list(x['c']), list(x['d'])]).apply(pd.Series)
df.columns =['a','b','c','d']

输出

   a  b          c                       d
0  1  b     [1, 2]         [first, second]
1  2  c  [1, 2, 3]  [third, fourth, fifth]

【讨论】:

以上是关于一次在多列上使用 pandas groupby().apply(list) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sklearn 中一次在多个列上应用预处理方法

Python pandas groupby 在多列上聚合,然后旋转

使用多列的 Pandas groupby 函数

pandas groupby 聚合具有多列的自定义函数

Python Pandas groupby 并沿多列排序

Pandas Groupby 独特的多列