如何使用Multiindex聚合到熊猫的列表中?

时间:2018-05-23 17:43:44

标签: python pandas pandas-groupby

我有一个这样的数据框:

    class1  class2  values  values2
0        1       0       1        5
1        1       1       2        8
2        1       0       3        3
3        2       0       5        6
4        2       0       2        5
5        2       1       4        2
6        2       1       2        3
7        2       1       3        1
8        3       0       1        3
9        3       0       3        3
10       3       1       4        2
11       3       1       2        4

我希望根据class1class2设置Multiindex,然后将valuevalue2汇总到列表中。所以我希望得到结果

   class1  class2     values    values2
0       1       0     [1, 3]     [5, 3]
1       1       1        [2]        [8]
2       2       0     [5, 2]     [6, 5]
3       2       1  [4, 2, 3]  [2, 3, 1]
4       3       0     [1, 3]     [3, 3]
5       3       1     [4, 2]     [2, 4]

我通过以下方式完成了尝试:

df.groupby(['class1']).agg(lambda x: x.tolist()).reset_index()

没问题。但我尝试了Multiindex:

df.groupby(['class1','class2']).agg(lambda x: x.tolist()).reset_index()

显示错误:

  

ValueError:函数不会减少

我也尝试过:

df.groupby(['class1', 'class2'])['values'].apply(lambda x: x.tolist()).reset_index()

此方法只能针对valueValue2单独处理。

任何人都可以用更好的方式帮助我吗?提前致谢

1 个答案:

答案 0 :(得分:2)

您可以与tuple汇总,然后使用list转换为applymap

df.groupby(['class1', 'class2']).agg(tuple).applymap(list).reset_index()

   class1  class2     values    values2
0       1       0     [1, 3]     [5, 3]
1       1       1        [2]        [8]
2       2       0     [5, 2]     [6, 5]
3       2       1  [4, 2, 3]  [2, 3, 1]
4       3       0     [1, 3]     [3, 3]
5       3       1     [4, 2]     [2, 4]