猿问

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

假设我有一个数据框,如下所示:


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


蛊毒传说
浏览 161回答 3
3回答

喵喵时光机

使用GroupBy.cumcount的计数连续值和列减value:#consecutive rows to Series gg = df['value'].ne(df['value'].shift()).cumsum()df['value'] = df['value'] - df.groupby(g).cumcount()print (df)  name  value0    a    1161    b    1152    c    1143    d    2254    e    2245    f    2236    g    222

狐的传说

如果连续值是唯一的,则可以 transformdf.groupby('value').value.transform(lambda k: k - k.reset_index().index)0    1161    1152    1143    2254    2245    2236    222

九州编程

使用 cumcountdf.value-=df.groupby('value').cumcount()dfOut[215]:   name  value0    a    1161    b    1152    c    1143    d    2254    e    2245    f    2236    g    222
随时随地看视频慕课网APP

相关分类

Python
我要回答