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
缺失,但在这种情况下,如果您对它没有意见的话。这非常有效,我将在以后调整索引,谢谢!