仅通过Pandas数据框中的某些键聚合列?

时间:2013-11-26 17:24:48

标签: python pandas dataframe

我有一个这样的数据框:

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的总和。无论我尝试什么,我似乎无法实现这一目标,但我确信我只是错过了一些东西。有谁知道怎么做?

1 个答案:

答案 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