2016-04-10 190 views
1

我有兩個DataFrames,第一個是我的主要df,第二個是我想用'更新'第一個。熊貓合併數據並覆蓋列

從本質上講,我有以下幾點:

In [205]: df1 
Out[205]: 
     date total 
0 04/10/2016  10 
1 04/10/2016  20 
2 04/10/2016  30 
3 04/10/2016  40 
4 04/10/2016  50 

In [206]: df2 
Out[206]: 
     date new 
0 04/11/2016 1 
1 04/11/2016 2 
2 04/11/2016 3 

當我合併,我得到兩個日期列。

In [207]: pd.merge(df1, df2, left_index=True, right_index=True, how='outer') 
Out[207]: 
     date_x total  date_y new 
0 04/10/2016  10 04/11/2016 1.0 
1 04/10/2016  20 04/11/2016 2.0 
2 04/10/2016  30 04/11/2016 3.0 
3 04/10/2016  40   NaN NaN 
4 04/10/2016  50   NaN NaN 

反正是有,那我就可以覆蓋原來的datedf1

現在,我會做:

In [209]: df3['date_x'].update(df3['date_y']) 

In [210]: df3 
Out[210]: 
     date_x total  date_y new 
0 04/11/2016  10 04/11/2016 1.0 
1 04/11/2016  20 04/11/2016 2.0 
2 04/11/2016  30 04/11/2016 3.0 
3 04/10/2016  40   NaN NaN 
4 04/10/2016  50   NaN NaN 

,並嘗試刪除該date_y但似乎並不十分有效。

我也嘗試過combine_first,但是在某些情況下,這會給我帶來不希望的結果(即如果我的原始日期是空白的,並且我將一個新的日期結合到它)。

回答

1

試試這個,這裏是merge的文檔:

In [154]: pd.merge(df2, df1, left_index=True, right_index=True, on='date', how='outer') 
Out[154]: 
     date total new 
0 04/11/2016  10 1 
1 04/11/2016  20 2 
2 04/11/2016  30 3 
3 04/10/2016  40 NaN 
4 04/10/2016  50 NaN 
+0

這不會覆蓋'df1'的日期,這是我們的目標在這裏 – NightHallow

+0

如果是作爲然後'DF1 [一樣簡單'date'] = df ['date']'應該做,不是幫助嗎? – Abbas

+0

對不起,我試過'pd.merge(df,df1,left_index = True,right_index = True,on ='date',how ='outer')',但是做了'pd.merge(df2,df1,left_index = True ,right_index = True,on ='date',how ='outer')'爲我工作。我沒有想過將第二個數據框作爲初始參數。 – NightHallow