我想使用最新資料填充 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]})
換句話說,我想用按寵物分組的最新非空值和按 id 排序來填充 NaN。這是我嘗試使用的代碼:dataframe.sort_values(by = 'id').groupby('pet').fillna(method = 'ffill')
uj5u.com熱心網友回復:
您擁有的代碼的問題是,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
uj5u.com熱心網友回復:
我認為 apply 沒有必要:
df.assign(**df.sort_values('id').groupby('pet').ffill())
pet id weight
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434718.html
上一篇:熊貓合并行和求和值?
