Pandas合并数据并覆盖列

时间:2016-04-10 14:31:56

标签: python pandas merge

我有两个DataFrame,第一个是我的主要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

无论如何,我可以覆盖date中的原始df1列吗?

现在,我会这样做:

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 个答案:

答案 0 :(得分: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