Внешнее объединение двух фреймов данных, которое повторяется для всех клиентов (python) - PullRequest
0 голосов
/ 02 ноября 2019

Как я могу сделать внешнее объединение для каждого клиента?

У меня есть такой набор данных

 Customer      Timestamp        Other_Col
     A    2017-05-01 00:01:00     Jun
     A    2017-05-01 00:02:00     Sep
     A    2017-05-01 00:03:00     Jun
     B    2017-05-07 23:58:00     Sep
     B    2017-05-07 23:59:00     Sep

И еще один такой

         Timestamp
     2017-05-01 00:01:00
     2017-05-01 00:02:00
     2017-05-01 00:03:00
     2017-05-07 23:58:00
     2017-05-07 23:59:00

Я хочучтобы получить все метки времени для каждого клиента в моем фрейме данных как таковые

 Customer      Timestamp        Other_Col
     A    2017-05-01 00:01:00     Jun
     A    2017-05-01 00:02:00     Sep
     A    2017-05-01 00:03:00     Jun
     A    2017-05-07 23:58:00     NaN
     A    2017-05-07 23:59:00     NaN
     B    2017-05-01 00:01:00     NaN
     B    2017-05-01 00:02:00     NaN
     B    2017-05-01 00:03:00     NaN
     B    2017-05-07 23:58:00     Sep
     B    2017-05-07 23:59:00     Sep

Как я могу это сделать? Выполнение слияния (how = 'external') не помогает, но я не могу сделать так, чтобы это зависело от клиента.

1 Ответ

0 голосов
/ 02 ноября 2019

Вы должны сделать левое соединение с «базовой» таблицей, чтобы добиться этого:

import pandas as pd
df1 = pd.read_csv('df1.txt',sep=';')
df1
Customer    Timestamp   Other_Col
0   A   2017-05-01 00:01:00 Jun
1   A   2017-05-01 00:02:00 Sep
2   A   2017-05-01 00:03:00 Jun
3   B   2017-05-07 23:58:00 Sep
4   B   2017-05-07 23:59:00 Sep

df2 = pd.read_csv('df2.txt',sep=';')
df2
Timestamp
0   2017-05-01 00:01:00
1   2017-05-01 00:02:00
2   2017-05-01 00:03:00
3   2017-05-07 23:58:00
4   2017-05-07 23:59:00


base = pd.DataFrame()
base['Customer']  = ['A']*5 + ['B']*5 
base['Timestamp'] = list(df2['Timestamp'])*2


pd.merge(base,df1,how='left',on=['Customer','Timestamp'])
Customer    Timestamp   Other_Col
0   A   2017-05-01 00:01:00 Jun
1   A   2017-05-01 00:02:00 Sep
2   A   2017-05-01 00:03:00 Jun
3   A   2017-05-07 23:58:00 NaN
4   A   2017-05-07 23:59:00 NaN
5   B   2017-05-01 00:01:00 NaN
6   B   2017-05-01 00:02:00 NaN
7   B   2017-05-01 00:03:00 NaN
8   B   2017-05-07 23:58:00 Sep
9   B   2017-05-07 23:59:00 Sep
...