前填充按组分隔的数据帧中的Null值



我想使用最新的数据填充NA,并将其应用于组。

这是我的数据帧

pet    id     weight (lbs)
dog    1      30
dog    2      23
dog    3      NaN
cat    4      10
dog    5      NaN
cat    6      NaN
dog    7      39
cat    8      18
hippo  9      138

这就是我想要的输出

pet    id     weight (lbs)
dog    1      30
dog    2      23
dog    3      23
cat    4      10
dog    5      23
cat    6      10
dog    7      39
cat    8      18
hippo  9      138

这是用于再现数据帧的代码-

df = pd.DataFrame({'pets':['dog', 'dog', 'dog', 'cat', 'dog', 'cat', 'dog', 'cat', 'hippo'],
'id':[1, 2, 3, 4, 5, 6, 7, 8, 8],
'Weight':[30, 23, np.nan, 10, np.nan, np.nan, 39, 10, 138]})

换句话说,我想用最近的非null值来填充NaN,该值按pet分组,按id排序。这是我尝试使用的代码:dataframe.sort_values(by = 'id').groupby('pet').fillna(method = 'ffill')

您所拥有的代码的问题是,pandas GroupBy Object没有sort_values方法。

因此,首先按pet对数据帧进行分组,然后应用一个函数,通过对id上的数据帧进行排序来对每个组进行前向填充。

sort_indexreset_index的重训练部分只是为了按照pet和id列的初始顺序获得结果数据帧。

out = (df.groupby(['pet'])
.apply(lambda x: x.sort_values('id').ffill())
.sort_index(level=1)
.reset_index(0, drop=True)
)

输出:

>>> out
pet  id  weight (lbs)
0    dog   1          30.0
1    dog   2          23.0
2    dog   3          23.0
3    cat   4          10.0
4    dog   5          23.0
5    cat   6          10.0
6    dog   7          39.0
7    cat   8          18.0
8  hippo   9         138.0

最新更新