python - 如何逐步减少熊猫数据框列中的值
问题描述
假设我有一个如下所列的数据框:
[1] df
name value
a 116
b 116
c 116
d 225
e 225
f 225
g 225
现在我希望 df 成为
name value
a 116
b 115
c 114
d 225
e 224
f 223
g 222
也就是说,只要原始 df 在连续行中的列中具有相同(固定)值,它应该逐渐减少 1。因此,名称 a、b、c 的值列中的值从 116 变为 114。对于 d, e,f,g 从 225 变为 222。
好心劝告。
解决方案
用于GroupBy.cumcount
计算连续值并从列中减去value
:
#consecutive rows to Series g
g = df['value'].ne(df['value'].shift()).cumsum()
df['value'] = df['value'] - df.groupby(g).cumcount()
print (df)
name value
0 a 116
1 b 115
2 c 114
3 d 225
4 e 224
5 f 223
6 g 222
推荐阅读
- oop - (巨型)应用程序真的只包含一个 Timer 对象吗?
- javascript - 检查 null 的条件语句不起作用
- c++ - Reversing a text read from console
- lumen - 接受对象的自定义过滤器 - lighthouse-php
- python - 在 NumPy 中将具有不同维度的“N”个 2D 数组连接到一个 3D 数组中
- arrays - 如何从我在 MongoDB 中的集合中的三个现有字段创建数组或嵌入文档
- java - 插入数组时 H2 数据库中的 SQL 语法错误
- jupyter-notebook - Google Colab中jupyter笔记本的所有单元格输出消失
- java - 为什么`var`不能用于可以推断类型的非局部变量?
- database-connection - 涉及链接表的废弃 H2 连接