Как обьединить два фрейма с несколькими условиями?

Есть два фрейма данных:

таблица № 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 шт):

Автор решения: SergFSM

Не знаю как провернуть такую хитрую манипуляцию, посмотрю что предложат знатоки 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
→ Ссылка
Автор решения: MaxU

Не уверен, что правильно понял вопрос, но из следующего фрейма:

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
→ Ссылка