假设我有一个数据框,如下所示:[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的value列中的值从116变为114。对于d, e,f,g从225变为222。
3 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
使用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
狐的传说
TA贡献1804条经验 获得超3个赞
如果连续值是唯一的,则可以 transform
df.groupby('value').value.transform(lambda k: k - k.reset_index().index)
0 116
1 115
2 114
3 225
4 224
5 223
6 222
九州编程
TA贡献1785条经验 获得超4个赞
使用 cumcount
df.value-=df.groupby('value').cumcount()
df
Out[215]:
name value
0 a 116
1 b 115
2 c 114
3 d 225
4 e 224
5 f 223
6 g 222
添加回答
举报
0/150
提交
取消