我有一个这样的数据框:
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
我希望根据class1
和class2
设置Multiindex,然后将value
和value2
汇总到列表中。所以我希望得到结果:
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()
此方法只能针对value
或Value2
单独处理。
任何人都可以用更好的方式帮助我吗?提前致谢
答案 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]