我有一个像这样的数据框:
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 的总和。无论我如何尝试,我似乎都无法实现这一目标,但我确信我只是错过了一些东西。有人知道该怎么做吗?
最佳答案
我认为没有办法绕过两次 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
关于python - 仅通过 Pandas 数据框中的某些键聚合列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223876/