2017-07-28 19 views
1

一些行和列的第二個數據幀充入值的熊貓數據框讓我們假設我有兩隻大熊貓dataframes df1df2從共同

df1 
     s1 s2 s3 
    bob nan nan nan 
    john nan nan nan 
    matt nan nan nan 

df2 
     s1 s3 s4 
    bob 32 11 22 
    matt 1 nan 2 

我會填補df1df2行和列中存在的值df1以便我的輸出是

 s1 s2 s3 
bob 32 nan 11 
john nan nan nan 
matt 1 nan nan 

這意味着,在這個玩具箱中,我對df2s4列不感興趣,以填充df1。 我所有試圖使用merge的嘗試都令人遺憾地失敗了,而且我總是以一個包含所有nan的數據幀結束。

回答

4

就地操作
使用pd.DataFrame.update
這將覆蓋在df1那裏是所有崗位中df2

df1.update(df2) 

df1 

     s1 s2 s3 
bob 32.0 NaN 11.0 
john NaN NaN NaN 
matt 1.0 NaN NaN 

一個非空值產生一個副本1
使用pd.DataFrame.alignpd.DataFrame.fillnapd.DataFrame.reindex_like
fillna將不起作用,除非索引和列對齊。

pd.DataFrame.fillna(*df1.align(df2)).reindex_like(df1) 

     s1 s2 s3 
bob 32.0 NaN 11.0 
john NaN NaN NaN 
matt 1.0 NaN NaN 

製作副本2
pd.DataFrame.combine_firstpd.DataFrame.reindex_like
這是值得商榷的,你把哪一個先。考慮到df1都是nan這並不重要。但是這將保留df1中的任何預先存在的非空值。否則,您可以將位置切換到df2.combine_first(df1)

df1.combine_first(df2).reindex_like(df1) 

     s1 s2 s3 
bob 32.0 NaN 11.0 
john NaN NaN NaN 
matt 1.0 NaN NaN 
+1

感謝您向我介紹'reindex_like'!它看起來像'df2.reindex_like(df1)'也產生所需的結果。 – unutbu

+1

在這種情況下,它的確如此。但可能不會在人爲設想的情況下。我甚至沒有想到那個,非常好! – piRSquared