汇总方法和Lambda函数

时间:2019-03-06 16:29:55

标签: python pandas

我有一个数据框df,想获取每个课程的ID列表:

import pandas as pd
list1 = [[1, ('A', 'B', 'C')], [2, ('M', 'E', 'F')], [3, ('H', 'A', 'D')], [4, ('H', 'A', 'D')]]    
df = pd.DataFrame(list1, columns=['ID', 'Class'])

df看起来像

ID    Class
1     (A, B, C) 
2     (M, E, F) 
3     (H, A, D) 
4     (H, A, D)

所需的输出是:

Class        ID 
(A, B, C)    [1]
(M, E, F)    [2] 
(H, A, D)    [3, 4] 

我尝试使用下面的代码,但是它不起作用。谢谢。

df.groupby('Class')['ID'].aggregate(lambda x: list(x))

2 个答案:

答案 0 :(得分:3)

您应该使用

df.groupby('Class').ID.agg(list).reset_index()
Out[473]: 
       Class      ID
0  (A, B, C)     [1]
1  (H, A, D)  [3, 4]
2  (M, E, F)     [2]

修复代码

df.groupby('Class')['ID'].aggregate(lambda x: x.tolist())

答案 1 :(得分:1)

这里有很多解决方案:

df = df.groupby('Class')['ID'].apply(list).reset_index()

       Class      ID
0  (A, B, C)     [1]
1  (H, A, D)  [3, 4]
2  (M, E, F)     [2]