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

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

最佳答案

我认为没有办法绕过两次 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/

相关文章:

python - 如何在 python 中向数据框添加新列并在其中为 d/f 行插入 d/f 值?

python - 将输出翻译成日语

python - QListView 中的复选框选择

python - Pandas 是否允许自定义对象作为列标签?

python - 查找股票行情中带有句点的股票时,pandas 数据读取器出现错误

python - 尴尬的 Pandas/Python Dataframe 索引的替代方案 : df_REPEATED[df_REPEATED ['var' ]]>0?

python - 在 DataFrame 底部添加一行以获得总计

python - 如何将数字形式的 python 列表转换为字母?

python - 扭曲地将证书传递给 ssl 处理程序

pandas - tensorflow 2 "Attempt to convert a value (63) with an unsupported type (<class ' numpy.int6 4'>) to a Tensor"