我想使用最新的数据填充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_index
和reset_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