我在 Pandas DF 中有一个时间顺序分组表。我正在尝试在组内创建一个运行总和,条件是运行总和不能为负数,即当运行总和变为负数时,列单元格值重置为零,并继续运行总和计算以保持完整性和数据质量。
我已将 cumsum() 与 groupby() 函数一起使用,但似乎无法即时将累积值重置为零。我还研究了下面的线程,但这与略有不同的问题相关:
Pandas dataframe - 重置运行总和
下面是代码(带有我一直在使用的示例数据):
group = ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C']
values = [-5, 4, 2, -4, -2, -2, 5, -2, 3, 6, 7, -11]
df = pd.DataFrame(list(zip(group, values)), columns =['group', 'val'])
df['cumsum_output'] = df.groupby('group')['val'].cumsum()
df['expected_out'] = [0, 4, 6, 2, 0, 0, 5, 3, 3, 9, 16, 5]
group val cumsum_output expected_out
0 A -5 -5 0
1 A 4 -1 4
2 A 2 1 6
3 A -4 -3 2
4 A -2 -5 0
5 B -2 -2 0
6 B 5 3 5
7 B -2 1 3
8 C 3 3 3
9 C 6 9 9
10 C 7 16 16
11 C -11 5 5
['cumsum_output' 是我从当前代码中得到的;而“expected_out”是我想要实现的理想目标。]
感谢任何在解决此问题方面有更好想法和建议的人提供的帮助和建议:-)
Cheers,
Nad