一次在多个列上使用pandas groupby()。apply(list)

时间:2019-05-13 09:07:47

标签: python pandas dataframe apply pandas-groupby

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

如果只需要对列表创建1列(在这种情况下为'b'),则df.groupby('a')['b'].apply(list)效果很好,但我不知道如何对多列进行操作。

数据框:

   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]

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

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]