用于在 Pandas 中进行选择性累积和的 Python 函数

问题描述

我正在尝试遍历 DataFrame 并根据另一列中值的变化累积一列中的值总和。

假设我有一个看起来像这样的 DataFrame,并且“accumulated_value”是我想要计算的列:

input_value 标准 accumulated_value
3 0 3
5 0 8
2 1 2
6 1 8
4 0 4

我正在寻找的是一种告诉 Python“只要标准值相同,累加输入的所有输入值并将中间累加值保存在新列中的方法”。基本上,我想要每当标准变量更改值时“绘制”假想线,然后将 np.cumsum() 应用于两条线之间的所有值。我希望这个问题有意义!

有没有相对简单的方法来做到这一点?

提前致谢!

解决方法

使用 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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...