首页 > 解决方案 > Pandas Groupby (shift) 函数为第一个条目返回 null

问题描述

对于以下代码,在 python 中,我试图得到最新评级之间的差异,按日期减去以前的评级,我在“orinc”中完成

但是,如果没有以前的评级 - 或“H_Name”的第一个条目,它会返回当前评级。是否有任何要添加到此代码中的内容,以便返回“null”或“nan”?

df2['orinc'] = df2['HIR_OfficialRating'] - df2.groupby('H_Name')['HIR_OfficialRating'].shift(1)

标签: pythonpandas

解决方案


当然,检查列中的值H_Name是否唯一,如果是,shift则返回缺失值后的每个值,因为转移不存在先前的值。

每个组的第一个值也是NaN出于相同的原因。

df2 = pd.DataFrame({
    'H_Name': ['a','a','a','a','e','b','b','c','d'],
    'HIR_OfficialRating': list(range(9))})

df2['new'] = df2.groupby('H_Name')['HIR_OfficialRating'].shift(1)
print (df2) 
  H_Name  HIR_OfficialRating  new
0      a                   0  NaN < first value of group a
1      a                   1  0.0
2      a                   2  1.0
3      a                   3  2.0
4      e                   4  NaN <-unique e
5      b                   5  NaN < first value of group b
6      b                   6  5.0
7      c                   7  NaN <-unique c
8      d                   8  NaN <-unique d

df2['orinc'] = df2['HIR_OfficialRating'] - df2.groupby('H_Name')['HIR_OfficialRating'].shift(1)
print (df2) 
  H_Name  HIR_OfficialRating  orinc
0      a                   0    NaN
1      a                   1    1.0
2      a                   2    1.0
3      a                   3    1.0
4      e                   4    NaN
5      b                   5    NaN
6      b                   6    1.0
7      c                   7    NaN
8      d                   8    NaN

推荐阅读