Возьмите эти два кадра данных:
a = pd.DataFrame({'id': [1,2,3], 'some':[None, None, 1], 'else': [11,22,33]})
b = pd.DataFrame({'id':[3,4,5], 'some': [5,5,5], 'el': [333,444,555]})
Я хочу объединить их в столбце id
, но, как видите, столбец some
будет перекрываться столбцом id=3
. Это означает, что запуск a.merge(b, on='id', how='outer')
приводит к следующему:
id some_x else some_y el
0 1 NaN 11.0 NaN NaN
1 2 NaN 22.0 NaN NaN
2 3 1.0 33.0 5.0 333.0
3 4 NaN NaN 5.0 444.0
4 5 NaN NaN 5.0 555.0
Как я могу просто сохранить столбец some
с первыми предоставленными значениями, то есть 1 вместо 5 и без столбцов _x
_y
?
ожидаемый вывод для строки с идентификатором 3 будет id: 3, some: 1, el, 333. Фрейм данных не будет иметь суффиксов _x или _y, как описано выше.
Я подозреваю, что вам нужно одно из двух: проще (но менее вероятно) вам просто нужен столбец 'some'
из a
, и в этом случае вы можете просто удалить ['b'] перед слиянием:
a.merge(b.drop('some', axis=1))
Или вам нужно значение a['some']
, если оно не равно нулю, в противном случае используйте b['some']
, и в этом случае вы можете использовать .fillna()
:
c = a.merge(b, on='id', how='outer')
c['some'] = c.some_x.fillna(c.some_y)
Слияние с fillna — это именно то, что здесь нужно. теперь все, что мне нужно сделать, это написать это в функцию, чтобы удалить столбцы _x
и _y
:) Спасибо!
Ожидаемый результат многое прояснит здесь.