我需要在組內的數據框的列中轉發填充值。我應該注意到,一個羣體的第一個價值永遠不會被建築遺失。目前我有以下解決方案。在熊貓數據框列中向前填充缺失值的高效解決方案?
df = pd.DataFrame({'a': [1,1,2,2,2], 'b': [1, np.nan, 2, np.nan, np.nan]})
# desired output
a b
1 1
1 1
2 2
2 2
2 2
以下是我迄今嘗試的三種解決方案。
# really slow solutions
df['b'] = df.groupby('a')['b'].transform(lambda x: x.fillna(method='ffill'))
df['b'] = df.groupby('a')['b'].fillna(method='ffill')
# much faster solution, but more memory intensive and ugly all around
tmp = df.drop_duplicates('a', keep='first')
df.drop('b', inplace=True, axis=1)
df = df.merge(tmp, on='a')
所有這三個產生期望我的輸出,但前兩個需要很長一段時間我的數據集,而第三個方案是更多的內存密集型的,感覺非常笨拙。有沒有其他方法可以轉發填充列?
按組分類的真實數據,作爲示例數據是什麼?如果是這樣的話,你應該可以僅僅定義一個'ffill',因爲你的組中的第一個值總是存在的,即'df ['b'] = df ['b'] .ffill()'。 – root
哇。我完全錯過了。分類後,它閃電般快。謝謝@root! – 3novak