При умножении двух Dataframe, если nan оставить данные из первой таблицы
Есть таблица с фактическими продажами по суткам
df_1 = pd.DataFrame( {'Магазин': ['first','first','second','second','second'],
'Дата': ['01.01.2020','02.01.2020','01.01.2020','02.01.2020','03.01.2020'],
'Товар1' : ['2','35','6','85','10'],
'Товар2': ['5','7','8','10','15'],
'Товар3' : ['25','235','46','855','100'],
})
df_1['Дата']=pd.to_datetime(df_1['Дата'])
df_1=df_1.set_index(['Магазин','Дата'])
Есть таблица с корректировкой:
df_corr = pd.DataFrame( {'Магазин': ['first','first','second','second','second'],
'Дата': ['01.01.2020','02.01.2020','01.01.2020','02.01.2020'],
'Товар1' : ['0.8','2','3','0.4'],
})
df_corr['Дата']=pd.to_datetime(df_corr['Дата'])
df_corr=df_corr.set_index(['Магазин','Дата'])
Как мне перемножить эти 2 таблицы, чтобы на выходе получить:
df_res = pd.DataFrame( {'Магазин': ['first','first','second','second','second'],
'Дата': ['01.01.2020','02.01.2020','01.01.2020','02.01.2020','03.01.2020'],
'Товар1' : ['1.6','70','18','34','10'],
'Товар2': ['5','7','8','10','15'],
'Товар3' : ['25','235','46','855','100'],
})
Т.е. перемножить значения в общих ячейках, а если значений во второй таблице нет, оставить первоначальные числа.
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно сделать простое произведение:
res = (df_1["Товар1"] * df_corr["Товар1"]).fillna(df_1["Товар1"])
df_1 = df_1.merge(res, how="right").set_index(df_1.index).fillna(df_1)
df_1:
Товар1 Товар2 Товар3
Магазин Дата
first 2020-01-01 1.6 5 25
2020-02-01 70.0 7 235
second 2020-01-01 18.0 8 46
2020-02-01 34.0 10 855
2020-03-01 10.0 15 100
Только не забудьте сначала привести тип колонки "Товар1" в обоих фреймах к float:
df_corr["Товар1"] = df_corr["Товар1"].astype(float)
df_1["Товар1"] = df_1["Товар1"].astype(float)


