pandas - 熊猫运行总和
问题描述
我有一个熊猫数据框,它是这样的:
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 的语法的一些帮助。
解决方案
根据您的逻辑:
#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
推荐阅读
- javascript - 当我在 React 中进行新的 API 调用时,如何更新相同的对象格式?
- java - 检查第二个数字的数字是否可以重新排列以形成第一个数字的功能是什么
- java - 如何使 mvn cobertura:cobertura 运行的测试不超过 mvn test
- android - 在使用 Border radius 和 backgroudn 图像时,移除 Flutter 中 Button 的默认白色
- php - php iconv 字符编码从泰语 ISO-8859-11 到 utf-8
- java - 如何将 Netbeans 连接到 Microsoft Sql Server?
- c# - 需要创建一个 WepApi 控制器来处理通用对象
- java - 如何在 ac:forEach 循环中传递选中的多个选中单选按钮的值?
- php - Laravel Livewire 报错“初始化前不能访问”
- python - 如何更改字典列表中的日期时间格式