Python 如何在列表定义的数据块上求和DataFrame列值?

Python 如何在列表定义的数据块上求和DataFrame列值?,python,pandas,dataframe,Python,Pandas,Dataframe,我很抱歉这个可能是新手的问题 有了一个ID列表,我想使用它们对数据帧的行进行分组,并对这些行组求和 以以下数据帧和ID列表为例: inp=pd.DataFrame({'amount':[0.2,0.5,0.8,0.9,1.2,0.9,0.5], 'id':[10,12,14,16,18,22,26]}) ids=[10,14,26] 我需要一个函数,该函数将返回ids[I]和ids[I+1]之间的行组的amount中的值之和,包括ids[I],不包括ids[I+1] 在提供的示例中,这将导致数

我很抱歉这个可能是新手的问题

有了一个ID列表,我想使用它们对数据帧的行进行分组,并对这些行组求和

以以下数据帧和ID列表为例:

inp=pd.DataFrame({'amount':[0.2,0.5,0.8,0.9,1.2,0.9,0.5],
'id':[10,12,14,16,18,22,26]})
ids=[10,14,26]
我需要一个函数,该函数将返回
ids[I]
ids[I+1]
之间的行组的
amount
中的值之和,包括
ids[I]
,不包括
ids[I+1]

在提供的示例中,这将导致数据帧(保留列
id

resu=pd.DataFrame({'ids'=[10,14,26],
“总金额”=[0.2+0.5,
0.8 + 0.9 + 1.2 + 0.9,
0.5]
}]

有什么建议吗?

您可以使用
isin
上的
cumsum
来识别块:

blocks = inp['id'].isin(ids).cumsum()

inp.groupby(blocks, as_index=False).agg({'id':'first', 'amount':'sum'})
输出:

   id  amount
0  10     0.7
1  14     3.8
2  26     0.5

您好@Quand_Hoang,非常感谢您提供了这个非常简洁的答案。请告诉我什么
isin().cumsum()
有吗?你有相关文档的链接吗?我只能找到数据帧的cumsum规范。但是对于这里的数据帧掩码,我找不到它。我不明白它是做什么的。非常感谢你的帮助!@Quand_Hoang,好的,对不起,我使用了这些命令,我想我明白了。每次在pd.Series中都会发现一个“True”值d使用
isin()
,它使用
cumsum()
增加一个计数器,给每个块一个不同的标签。非常聪明!非常感谢!