Как обьединить два фрейма с несколькими условиями?
Есть два фрейма данных:
таблица № 1 задание:
| Код Тмц | ТКА | Заказ-наряд | Дата | кол |
|---|---|---|---|---|
| 001231564 | 3610 | Завод_1 | 01.09.2021 | 1 |
| 123449847 | 1474 | Завод_1 | 02.09.2021 | 3 |
Далее есть вторая таблица № 2 график:
| Материал | ТКА | 01.09.2021 | 02.09.2021 | ... | 30.09.2021 |
|---|---|---|---|---|---|
| 001231564 | 3610 | ||||
| 89798461 | 1474 |
Необходимо чтобы данные (именно значения колонки кол) из таблицы № 1 при условии равенства по полям (Код Тмц = Материал, ТКА = ТКА, и соответсвующей даты) попали в таблицу № 2.
Например код = 001231564 присутсвует в обеих таблицах и значение ТКА = 3610 у обоих одинаково, далее дата в обеих таблицах аналогично присутствует!
Ответы (2 шт):
Не знаю как провернуть такую хитрую манипуляцию, посмотрю что предложат знатоки pandas. От себя могу предложить такой вариант:
из таблицы №2 делаем таблицу без дат, потом делаем слияние с таблицей №1 по ключевым столбцам, потом строим сводную по датам, получаем похожий результат:
df1 = pd.DataFrame([[1,'a','date1',10],[2,'b','date2',20],[1,'b','date1',20]],columns=['a','b','date','num'])
df2 = pd.DataFrame([[1,'a'],[2,'b']],columns=['a','b'])
df3 = df2.merge(df1,on=['a','b'],how='outer').pivot(columns='date',values='num',index=['a','b']).fillna(0)
print(df3)
вывод:
date date1 date2
a b
1 a 10.0 0.0
b 20.0 0.0
2 b 0.0 20.0
Не уверен, что правильно понял вопрос, но из следующего фрейма:
In [22]: df
Out[22]:
КодТмц ТКА Заказ-наряд Дата кол
0 1231564 3610 Завод_1 01.09.2021 1
1 123449847 1474 Завод_1 02.09.2021 3
можно получить такой, воспользовавшись DataFrame.pivot_table():
res = (df
.drop(columns="Заказ-наряд")
.pivot_table(index=["КодТмц", "ТКА"], columns="Дата",
values="кол", aggfunc="sum", fill_value=0)
.reset_index())
результат:
In [24]: res
Out[24]:
Дата КодТмц ТКА 01.09.2021 02.09.2021
0 1231564 3610 1 0
1 123449847 1474 0 3
