我有一个这样的数据框:
k1 k2 k3 v1 v2
foo bar baz 20 40
foo bar baz 10 30
foo bar baz 5 20
foo bar qux 10 20
foo bar qux 10 30
foo bar qux 15 20
bar baz foo 10 15
bar baz foo 20 35
bar baz foo 10 40
我想要做的基本上是所有三个k *列的聚合(和)v1,但是只用k1和k2聚合v2,所以我最终得到这样的结果:
k1 k2 k3 v1 v2
foo bar baz 35 160
foo bar qux 35 160
bar baz foo 40 90
换句话说,在聚合版本中,v2基本上忽略了k3的存在,并且在两行中只有k1和k2的总和。无论我尝试什么,我似乎无法实现这一目标,但我确信我只是错过了一些东西。有谁知道怎么做?
答案 0 :(得分:4)
我认为没有办法两次做groupby。然后加入。
In [22]: df1 = df.groupby(['k1', 'k2', 'k3'])['v1'].sum()
In [23]: df2 = df.groupby(['k1', 'k2'])['v2'].sum()
In [24]: df1.reset_index().join(df2, on=['k1', 'k2'])
Out[24]:
k1 k2 k3 v1 v2
0 bar baz foo 40 90
1 foo bar baz 35 160
2 foo bar qux 35 160