首页 > 解决方案 > 如何逐步减少熊猫数据框列中的值

问题描述

假设我有一个如下所列的数据框:

[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。

好心劝告。

标签: pythonpandas

解决方案


用于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

推荐阅读