假设我有一个dataframe,如下所示:
[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。
善意的建议。
6条答案
按热度按时间7d7tgy0s1#
使用
GroupBy.cumcount
对连续值进行计数,并从value
列中减去:5cg8jx4n2#
如果连续值是唯一的,则可以
transform
4uqofj5v3#
使用
cumcount
mcdcgff04#
可能有一种更简洁的方法来做到这一点,但你可以像这样得到你想要的结果:
本质上,这创建了一个列,它标记了连续的相等数量的块(我称之为
x
),按该列分组,然后减去reset_index
的结果,这只是一个range
对象,每个连续组的长度(即从第一个减去0
,从第二个减去1
,等等...)g52tjvyc5#
我认为首先你必须对你的dataframe值列进行排序,然后你可以使用一个简单的for循环来减少值。
xdnvmnnf6#
输出: