Как объединить таблицы по подстроке?
Пытаюсь сделать объединение двух фреймов по некоторому условию, но не пойму как это сделать.
DataFrame: my
Operator phone Date Year Month Weekday
0 Иванов Иван 89101054581; 88312617706 2021-01-01 2021 1 4
1 Петров Роман 89307167823 2021-01-08 2021 1 4
3 Иванов Иван 89200239899; 89519012568 2021-01-11 2021 1 0
4 Петров Роман 89307167823 2021-01-20 2021 1 4
DataFrame: ph
Date2 Year Month Кто звонил Куда звонил Статус звонка
0 2021-01-04 12:10:47 2021 1 89101054581 4462 БЕЗ ОТВЕТА
1 2021-01-06 15:05:21 2021 1 89101054581 4459 БЕЗ ОТВЕТА
2 2021-01-11 8:03:13 2021 1 88312617706 4458 БЕЗ ОТВЕТА
3 2021-01-21 8:03:36 2021 1 89200239899 4457 ОТВЕЧЕН
Результирующий фрейм:
Operator phone Date Year Month
0 Иванов Иван 89101054581; 88312617706 2021-01-01 2021 1
Date2 Кто звонил Куда звонил Статус звонка
2021-01-04 12:10:47 89101054581 4462 БЕЗ ОТВЕТА
2021-01-06 15:05:21 89101054581 4459 БЕЗ ОТВЕТА
2021-01-11 8:03:13 88312617706 4458 БЕЗ ОТВЕТА
Operator phone Date Year Month
1 Иванов Иван 89200239899; 89519012568 2021-01-11 2021 1
Date2 Кто звонил Куда звонил Статус звонка
2021-01-21 8:03:36 89200239899 4457 ОТВЕЧЕН
Если один из номеров в столбце my['phone'] равен номеру телефона из столбца ph['Кто звонил'] и при этом my['Month'] = ph['Month'], то должна получится таблица как на картинке, фрейм - Sum_table
Просто сделать concat по полю my['phone'], что-то типа:
result = pd.concat([my2, ph2], axis=1, join="inner")
не работает.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
решение:
res = (my
.assign(x=my["phone"].str.split(";\s*"))
.explode("x")
.merge(ph.assign(x=ph["Кто звонил"].astype(str)))
.drop(columns="x"))
результат:
In [316]: res
Out[316]:
Operator phone Date Year Month Weekday Date2 Кто звонил Куда звонил Статус звонка
0 Иванов Иван 89101054581; 88312617706 2021-01-01 2021 1 4 2021-01-04 12:10:47 89101054581 4462 БЕЗ ОТВЕТА
1 Иванов Иван 89101054581; 88312617706 2021-01-01 2021 1 4 2021-01-06 15:05:21 89101054581 4459 БЕЗ ОТВЕТА
2 Иванов Иван 89101054581; 88312617706 2021-01-01 2021 1 4 2021-01-11 8:03:13 88312617706 4458 БЕЗ ОТВЕТА
3 Иванов Иван 89200239899; 89519012568 2021-01-11 2021 1 0 2021-01-21 8:03:36 89200239899 4457 ОТВЕЧЕН