熊猫数据框问题:Groupby显示最大价值

时间:2020-10-29 09:40:07

标签: python pandas dataframe

我在上一个问题(Pandas Dataframe Question: Subtract next row and add specific value if NaN)上犯了一个小错误

import pandas as pd

df = pd.DataFrame({'label': 'a a b a c c b b c'.split(), 'Val': [2,2,6, 8, 14, 14,16, 18, 22]})
df

label   Val
0   a   2
1   a   2
2   b   6
3   a   8
4   c   14
5   c   14
6   b   16
7   b   18
8   c   22

df['Results'] = abs(df.groupby(['label'])['Val'].diff(-1)).fillna(3)
df

label   Val Results
0   a   2   0.0
1   a   2   6.0
2   b   6   10.0
3   a   8   3.0
4   c   14  0.0
5   c   14  8.0
6   b   16  2.0
7   b   18  3.0
8   c   22  3.0

是否有可能得到这样的东西:


label   Val Results
0   a   2   6.0
1   a   2   6.0
2   b   6   10.0
3   a   8   3.0
4   c   14  8.0
5   c   14  8.0
6   b   16  2.0
7   b   18  3.0
8   c   22  3.0

没有零值,相同距离下的值应该相同。

1 个答案:

答案 0 :(得分:1)

如果需要每组最后一个非0值替换0,则可以将0替换为缺失值,并添加GroupBy.bfill

df['Results'] = (df.groupby(['label'])['Val']
                   .diff(-1)
                   .fillna(3)
                   .replace(0, np.nan)
                   .groupby(df['label'])
                   .bfill()
                   .abs())

print (df)
  label  Val  Results
0     a    2      6.0
1     a    2      6.0
2     b    6     10.0
3     a    8      3.0
4     c   14      8.0
5     c   14      8.0
6     b   16      2.0
7     b   18      3.0
8     c   22      3.0