首页 > 解决方案 > 熊猫运行总和

问题描述

我有一个熊猫数据框,它是这样的:

 x y
 1 0
 2 1
 3 2
 4 0 <<<< Reset
 5 1
 6 2
 7 3
 8 0 <<<< Reset
 9 1
10 2

这些x值可以是任何东西,它们对这个问题没有意义。y 值递增,然后重新设置并再次递增。我需要第三列(z),它是一个代表组的数字,因此在重置 y 值时它会增加。

我不能保证重置为零,只有小于前一个值的值才表示重置。

 x y z
 1 0 0
 2 1 0
 3 2 0
 4 0 1 <<<< Incremented by 1
 5 1 1
 6 2 1
 7 3 1
 8 0 2 <<<< Incremented by 1
 9 1 2
10 2 2

所以要生产z,我明白需要做什么,只是不熟悉语法。我的解决方案是首先分配z为 0 和 1 的稀疏列,其中除了 1 之外的所有内容都为零y[ix] < y[ix-1],表示y计数器已被重置。然后应该在z列上执行累积运行总和,这意味着:z[ix] = sum(z[0],z[1],...,z[ix])

如果有人有时间,我会感谢您对分配列 z 的语法的一些帮助。

标签: pandassyntaxcumsum

解决方案


根据您的逻辑:

#general case
df['z'] = df['y'].diff().lt(0).cumsum()

# or equivalently
# df['z'] = df['y'].lt(df['y'].shift()).cumsum()

输出:

    x  y  z
0   1  0  0
1   2  1  0
2   3  2  0
3   4  0  1
4   5  1  1
5   6  2  1
6   7  3  1
7   8  0  2
8   9  1  2
9  10  2  2

推荐阅读