【问题标题】:Summing rows based on conditional in Pandas根据 Pandas 中的条件对行求和
【发布时间】:2017-03-07 04:01:40
【问题描述】:

我试图了解如何根据 Pandas 中的 2 个索引总结行的子集。第一个索引对行进行分组,第二个索引将确定要对哪些行求和。举个简单的例子,假设我有数据框

index1 | index2 | value
------------------------
  a    |    1   |  10
  a    |    2   |  11
  a    |    3   |  12
  b    |    1   |  20
  b    |    2   |  21
  b    |    3   |  22

如何将索引12 对应的行求和,但仍将它们分组在索引ab 下。即以下结果。

index1 | index2 | value
------------------------
  a    |    1   |  21
  a    |    2   |  12
  b    |    1   |  41
  b    |    2   |  22

这里与1index22 对应的行已被汇总为1 的新index2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以从 index2 列导出一个新的数组/系列作为组变量,然后进行求和:

    df.groupby([df.index1, ~df.index2.isin([1,2]) + 1]).value.sum().reset_index()
    
    #index1 index2  value
    #0    a      1     21
    #1    a      2     12
    #2    b      1     41
    #3    b      2     22
    

    【讨论】:

    • 谢谢,它适用于最小示例,但无法扩展。如果index2 的范围为1,2,3,4,那么它最终仍会返回2 个组(而不是3 个)。您介意对答案进行一些解释,以便我弄清楚如何根据自己的需要进行调整吗?
    • 上述方法将所有 1 和 2 转换为 1,将所有其他值转换为 2 作为最终组变量,因此它将只有两个组。如果您只想将 1 和 2 组合为一个组,同时保持其他值分开,例如 df.groupby([df.index1, df.index2.replace(2, 1)]).value.sum().reset_index(),您可以尝试将所有 2 替换为 1。结果索引将缺少2,但在这种情况下,如果您可以接受的话。
    • 这个效果很好,我会在之后调整索引,谢谢!
    猜你喜欢
    • 2023-01-16
    • 2020-10-19
    • 2013-12-03
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2017-12-11
    • 2021-01-25
    相关资源
    最近更新 更多