将组中的单个值传播到组中的所有其他 NaN 值

Spread single value in group across all other NaN values in group

在此示例中,我们尝试将组和列中的值应用于同一组和列中的所有其他 NaN。

import pandas as pd
df = pd.DataFrame({'id':[1,1,2,2,3,4,5], 'Year':[2000,2000, 2001, 2001, 2000, 2000, 2000], 'Values': [1, 3, 2, 3, 4, 5,6]})
df['pct'] = df.groupby(['id', 'Year'])['Values'].apply(lambda x: x/x.shift() - 1)
print(df)

   id  Year  Values  pct
0   1  2000       1  NaN
1   1  2000       3  2.0
2   2  2001       2  NaN
3   2  2001       3  0.5
4   3  2000       4  NaN
5   4  2000       5  NaN
6   5  2000       6  NaN

我尝试使用 .ffill() 来填充每个包含值的组中的 NaN。例如,代码试图使与索引 0 关联的 NaN 为 2.0,与索引 2 关联的 NaN 为 0.5。

df['pct'] = df.groupby(['id', 'Year'])['pct'].ffill()
print(df)

   id  Year  Values  pct
0   1  2000       1  NaN
1   1  2000       3  2.0
2   2  2001       2  NaN
3   2  2001       3  0.5
4   3  2000       4  NaN
5   4  2000       5  NaN
6   5  2000       6  NaN

应该是bfill

df['pct'] = df.groupby(['id', 'Year'])['pct'].bfill()
df
Out[109]: 
   id  Year  Values  pct
0   1  2000       1  2.0
1   1  2000       3  2.0
2   2  2001       2  0.5
3   2  2001       3  0.5
4   3  2000       4  NaN
5   4  2000       5  NaN
6   5  2000       6  NaN