Панды сливаются без перезаписи - PullRequest
1 голос
/ 14 октября 2019

У меня есть два кадра данных. Я пытаюсь объединить данные из DF1 в DF2 без изменения каких-либо ранее существующих данных в DF2.

DF1 = 
Value    Color
0         Red
1         White
2         Blue

DF2 = 
Value    Color
0         
1         
2         Brown
3         Black
4         White
5         

DF3 = pd.merge(DF2, DF1, on="Value", how='left', suffixes=('_x', '')).drop(['Color_x'], axis=1)

Текущий результат: перезаписывает данные, которые уже существуют. Например, он корректно перезаписывает коричневый на синий. Тем не менее, он также удаляет черный и белый, так как эти значения не существуют в DF1. Я хочу, чтобы он просто сливался или перезаписывался там, где совпадает значение, которое мы объединяем.

DF3 = 
Value    Color
0         Red
1         White
2         Blue
3         
4         
5         

Ожидаемый результат:

DF3 = 
Value    Color
0         Red
1         White
2         Blue
3         Black
4         White
5         

Ответы [ 2 ]

5 голосов
/ 14 октября 2019

вы ищете update

df2.update(df1)

print(df2)

Out[253]:
   Value  Color
0  0.0    Red
1  1.0    White
2  2.0    Blue
3  3.0    Black
4  4.0    White
5  5.0   

Примечание : этот ответ основан на ваших выборочных данных, где df1 index или value является подмножеством df2. Вы не упоминаете об индексе, поэтому я предполагаю, что это значение по умолчанию rangeindex. Если индекс не Rangeindex, вам нужно set_index на value

df2 = df2.set_index('Value')
df2.update(df1.set_index('Value'))
df2 = df2.reset_index()
2 голосов
/ 14 октября 2019

Мы можем использовать combine_first

df1.set_index('Value').combine_first(df2.set_index('Value')).reset_index()
   Value  Color
0      0    Red
1      1  White
2      2   Blue
3      3  Black
4      4  White
5      5    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...