为了账号安全,请及时绑定邮箱和手机立即绑定

如何从熊猫数据框的列中逐步减少值

如何从熊猫数据框的列中逐步减少值

蛊毒传说 2021-04-08 18:48:32
假设我有一个数据框,如下所示:[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


查看完整回答
反对 回复 2021-04-27
?
狐的传说

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


查看完整回答
反对 回复 2021-04-27
?
九州编程

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


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信