2015-04-06 69 views
3

與該行的總和替換爲NaN我試圖與該行的一個數據幀大熊貓的總和來代替楠某些列。請參見下面的示例性數據:如何大熊貓DatatFrame

Items| Estimate1| Estimate2| Estimate3|  
Item1| NaN  |  NaN |   8  
Item2| NaN  | NaN   | 5.5| 

我希望能有估計1 & 2爲8和5.5項目1和2分別。

到目前爲止,我已經使用df.fillna(df.sum(), inplace=True)嘗試,但存在數據幀沒有變化。任何人都可以幫助我糾正我的代碼或推薦正確的方式來做到這一點嗎?

+0

你可以嘗試提供'軸= 1'到兩個'fillna'和'sum'打電話? – joris

+0

@Joris我試圖df.fillna(df.sum(),就地=真,軸= 1),我已經得到了一個錯誤:「NotImplementedError:目前只能通過柱字典/系列欄中填入」 – Avagut

+0

事實上,您對了。請參閱我的回答以獲得解決方法 – joris

回答

3

提供axis=1似乎不工作(如用系列填充僅適用於列逐列的情況下,不爲行通過行)。
解決方法是將每行的總和「廣播」到與原始索引/列具有相同索引/列的數據幀。有了一個稍微修改示例數據框:

In [57]: df = pd.DataFrame([[np.nan, 3.3, 8], [np.nan, np.nan, 5.5]], index=['Item1', 'Item2'], columns=['Estimate1', 'Estimate2', 'Estimate3']) 

In [58]: df 
Out[58]: 
     Estimate1 Estimate2 Estimate3 
Item1  NaN  3.3  8.0 
Item2  NaN  NaN  5.5 

In [59]: fill_value = pd.DataFrame({col: df.sum(axis=1) for col in df.columns}) 

In [60]: fill_value 
Out[60]: 
     Estimate1 Estimate2 Estimate3 
Item1  11.3  11.3  11.3 
Item2  5.5  5.5  5.5 

In [61]: df.fillna(fill_value) 
Out[61]: 
     Estimate1 Estimate2 Estimate3 
Item1  11.3  3.3  8.0 
Item2  5.5  5.5  5.5 

有這個開放的增強問題:https://github.com/pydata/pandas/issues/4514

+0

謝謝!這正是我需要的! – Avagut

0

作爲替代方案,你也可以使用一個applylambda表達這樣的:

df.apply(lambda row: row.fillna(row.sum()), axis=1) 

產生期望的結果

 Estimate1 Estimate2 Estimate3 
Item1  11.3  3.3  8.0 
Item2  5.5  5.5  5.5 

雖然不確定效率。