具有两个数据框:
id Country Channel Week Value
0 ES Train 2018-48 1000
1 ES Train 2018-49 1000
2 ES Train 2018-50 1000
3 ES Train 2018-51 1000
4 ES Train 2018-52 1000
和
Week Product1 Product2 Product3
2018-48 25% 50% 25%
2018-49 25% 50% 25%
2018-50 25% 50% 25%
2018-51 25% 50% 25%
2018-52 25% 50% 25%
如何在将每种产品添加到第一帧的每一行并使用乘以产品本身的值的同时创建两者的组合?
例如在最初的两个星期中,这将导致:
id Country Channel Week Value Product
0 ES Train 2018-48 250 Product1
1 ES Train 2018-48 500 Product2
2 ES Train 2018-48 250 Product3
3 ES Train 2018-49 250 Product1
4 ES Train 2018-49 500 Product2
5 ES Train 2018-49 250 Product3
6 ...
答案 0 :(得分:1)
假设您从数据帧df1
和df2
开始,首先融化df2
(从宽到长),将百分比转换为数字,然后与df1
合并:
df2 = pd.melt(df2, id_vars='Week', value_vars=['Product1', 'Product2', 'Product3'])
df2['value'] = pd.to_numeric(df2['value'].str[:-1])
res = df1.merge(df2)\
.eval('Value = Value * value / 100')\
.drop('value', 1)
print(res)
id Country Channel Week Value variable
0 0 ES Train 2018-48 250.0 Product1
1 0 ES Train 2018-48 500.0 Product2
2 0 ES Train 2018-48 250.0 Product3
3 1 ES Train 2018-49 250.0 Product1
4 1 ES Train 2018-49 500.0 Product2
5 1 ES Train 2018-49 250.0 Product3
6 2 ES Train 2018-50 250.0 Product1
7 2 ES Train 2018-50 500.0 Product2
8 2 ES Train 2018-50 250.0 Product3
9 3 ES Train 2018-51 250.0 Product1
10 3 ES Train 2018-51 500.0 Product2
11 3 ES Train 2018-51 250.0 Product3
12 4 ES Train 2018-52 250.0 Product1
13 4 ES Train 2018-52 500.0 Product2
14 4 ES Train 2018-52 250.0 Product3