Объединение значений двух столбцов, к которым применяется «внешнее» слияние - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь выполнить pd.merge способом outer на двух столбцах. Но мне нужен выходной фрейм данных, чтобы два столбца фактически объединились, чтобы не было значений Nan.

Я приведу пример. Предположим, что следующие столбцы данных, которые будут объединяться в столбцах меток времени:

a1=['2019-09-01 00:00:00', '2019-09-01 01:00:00', '2019-09-01 03:00:00', '2019-09-10 01:00:00']
a2=['a','c_1','d','f_1']
b1=['2019-09-01 00:10:00', '2019-09-01 01:00:00', '2019-09-01 03:07:00', '2019-09-10 01:00:00']
b2=['b','c_2', 'e', 'f_2']
A=pd.DataFrame({'a1':a1, 'a2':a2})
A.a1=pd.to_datetime(A.a1)
B=pd.DataFrame({'b1':b1, 'b2':b2})
B.b1=pd.to_datetime(B.b1)

Объединенный кадр данных, который я хочу получить, близок к этому:

merged=pd.merge(A,B, left_on='a1', right_on='b1', how='outer', sort=True)
print(merged)
>>>
                   a1   a2                  b1   b2
0 2019-09-01 00:00:00    a                 NaT  NaN
1                 NaT  NaN 2019-09-01 00:10:00    b
2 2019-09-01 01:00:00  c_1 2019-09-01 01:00:00  c_2
3 2019-09-01 03:00:00    d                 NaT  NaN
4                 NaT  NaN 2019-09-01 03:07:00    e
5 2019-09-10 01:00:00  f_1 2019-09-10 01:00:00  f_2

, за исключением того, что требуемый вывод должен иметь 'a1 'и' b1 'объединены. Это должно выглядеть следующим образом:

             datetime   a2    b2  #datetime column has 'a1' and 'b1' merged
0 2019-09-01 00:00:00    a   NaN
1 2019-09-01 00:10:00  NaN     b
2 2019-09-01 01:00:00  c_1   c_2
3 2019-09-01 03:00:00    d   NaN
4 2019-09-01 03:07:00  NaN     e
5 2019-09-10 01:00:00  f_1   f_2

Есть какие-нибудь мысли о том, как я могу выполнить это в стиле пифоники / панда?

Заранее спасибо: -)

1 Ответ

0 голосов
/ 07 октября 2019

Вы можете использовать функцию pandas 'combine_first после слияния:

merged['datetime'] = merged['a1'].combine_first(merged['b1'])

, которая будет принимать значение a1, а если это na, то значение b1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...