所以我有一个数据框,我想通过分组依据合并一些行。
样本DF
col_a col_b col_c col_e col_f
0 1 0 1 -1.0 2
1 1 1 3 0.0 3
2 1 2 4 NaN 3
3 2 0 3 4.0 6
4 3 0 3 4.0 2
我希望输出看起来像这样...
df.groupby('col_a')
col_a, col_c ...col_f
1 {0: 1, 1: 3, 2:4} {0:2,1:3,2:3}
2 .... ....
3 .... ....
基本上,按col_a分组,然后通过col_f汇总我们为col_c获得的所有值,并将这些值设置到字典中,其中col_b是字典键。
不确定是否有使用groupby的方法,也许还有某种agg函数的方法,或者我是否只是愿意编写一个采用数据框并遍历每一行并使用.apply的python函数。想法?
编辑:
Original:
col_a col_b col_c col_e col_f
0 1 A 1 -1.0 2
1 1 B 3 0.0 3
2 1 C 4 NaN 3
3 2 A 3 4.0 6
4 3 A 3 4.0 2
Desired:
col_a, col_c ...col_f
1 {A: 1, B: 3, C:4} {A:2,B:3,C:3}
2 .... ....
3 {A:3} {A:2}
答案 0 :(得分:2)
我不希望您这样做,很少需要有一个dicts的DataFrame。您可以使用DataFrame进行所有相同(或更多)操作,并将这些作为MultiIndex中的索引/列:
In [11]: res = df.set_index(["col_a", "col_b"])
In [12]: res
Out[11]:
col_c col_e col_f
col_a col_b
1 0 1 -1.0 2
1 3 0.0 3
2 4 NaN 3
2 0 3 4.0 6
3 0 3 4.0 2
现在您可以通过col_a,col_b和任何其他列(就好像是字典)访问DataFrame。
In [13]: res.loc[(1, 2), "col_c"]
Out[13]: 4.0
In [14]: res.loc[1, "col_c"]
Out[14]:
col_b
0 1
1 3
2 4
Name: col_c, dtype: int64
等与在DataFrame中使用dict相比,这将更加高效。