2016-04-10 10 views
1

У меня есть два DataFrames, первый из которых является моим основным df, а второй - одним, я хочу «обновить» первое.Pandas слияние данных и переписывание столбца

По сути, у меня есть следующие:

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

Попробуйте это, и вот документация 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 = 'external') 'работал для меня. Я не думал, что второй блок данных будет основным аргументом. – NightHallow

Смежные вопросы