Python 在Pandas中基于条件的行求和

Python 在Pandas中基于条件的行求和,python,pandas,Python,Pandas,我试图理解如何根据熊猫中的两个索引汇总行的子集。第一个索引对行进行分组,第二个索引将确定要求和的行。举个简单的例子,假设我有数据帧 index1 | index2 | value ------------------------ a | 1 | 10 a | 2 | 11 a | 3 | 12 b | 1 | 20 b | 2 | 21 b | 3 | 22 如何

我试图理解如何根据熊猫中的两个索引汇总行的子集。第一个索引对行进行分组,第二个索引将确定要求和的行。举个简单的例子,假设我有数据帧

index1 | index2 | value
------------------------
  a    |    1   |  10
  a    |    2   |  11
  a    |    3   |  12
  b    |    1   |  20
  b    |    2   |  21
  b    |    3   |  22
如何对索引
1
2
对应的行求和,但仍将它们分组在索引
a
b
下。即以下结果。

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

此处,与
1
2
index2
相对应的行已汇总到
1
的新
index2
中。您可以从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组合为一个组,同时将其他值保持为单独的,则可以尝试将所有2替换为1,例如
df.groupby([df.index1,df.index2.replace(2,1)]).value.sum().reset_index()
。结果索引将有
2
缺失,但在这种情况下,如果您对它没有意见的话。这非常有效,我将在以后调整索引,谢谢!