Python函数在pandas中用于选择累加和
我试图循环一个数据帧,并根据另一列中的值的变化在一列中累积一个值的总和 假设我有一个类似这样的数据帧,“累计值”是我要计算的列: 输入值 标准 累积值 3. 0 3. 5. 0 8. 2. 1. 2. 6. 1. 8. 4. 0 4.Python函数在pandas中用于选择累加和,python,pandas,dataframe,cumsum,accumulate,Python,Pandas,Dataframe,Cumsum,Accumulate,我试图循环一个数据帧,并根据另一列中的值的变化在一列中累积一个值的总和 假设我有一个类似这样的数据帧,“累计值”是我要计算的列: 输入值 标准 累积值 3. 0 3. 5. 0 8. 2. 1. 2. 6. 1. 8. 4. 0 4. 使用shift和cumsum创建要分组的键。然后您可以对键进行分组,并对输入的_值求和 df['accumulated_value'] = df.assign(key=(df['criterion'] != df['criterion'].shift()).cum
使用shift和cumsum创建要分组的键。然后您可以对键进行分组,并对输入的_值求和
df['accumulated_value'] = df.assign(key=(df['criterion'] != df['criterion'].shift()).cumsum()).groupby('key')['input_value'].cumsum()
input_value criterion accumulated_value
0 3 0 3
1 5 0 8
2 2 1 2
3 6 1 8
4 4 0 4
请参考@HenryEcker的评论,并注意您不需要指定掩码的结果。而只是按掩码返回的序列分组
df.groupby((df['criterion'] != df['criterion'].shift()).cumsum())['input_value'].cumsum()
groupby
可以接受一系列df.groupby((df['criteria']!=df['criteria'].shift()).cumsum())['input_value'].cumsum()
无需分配临时密钥,对于较大的帧,临时密钥可能非常昂贵。(+1任意一种方式)=@HenryEcker你完全正确。这是我的疏忽。我会更新我的答案以反映你的建议。太棒了,谢谢,这很有魅力。感谢@HenryEcker的groupby()建议。实际上,我最终在这个sime中将分配的密钥用于不同的任务,但很高兴知道,对于更大的df,可以避免使用它。