我有一个类似以下的数据框,它指示第1年的费用:
b1 b2
t1 100 110
t2 100 120
t3 150 180
我还有另一个数据框,显示了这些年来成本的乘数:
y1 y2 y3
t1 1 1.1 1.2
t2 1 1.08 1.15
我希望输出类似于以下内容(请注意,t3
不在上面的数据框中,因此它的乘数为1):
t1 b1 y1 100
y2 110
y3 120
b2 y1 110
y2 121
y3 132
t2 b1 y1 100
y2 108
y3 115
b2 y1 120
y2 129.6
y3 138
t3 b1 y1 150
y2 150
y3 150
b2 y1 180
y2 180
y3 180
我该如何实现?
非常感谢您的提前帮助。
答案 0 :(得分:1)
在merge
之后使用stack
newdf=df1.stack().reset_index().merge(df2.stack().reset_index(),on='level_0')
newdf.assign(v=newdf['0_x']*newdf['0_y']).set_index(['level_0','level_1_x','level_1_y']).v
Out[133]:
level_0 level_1_x level_1_y
t1 b1 y1 100.0
y2 110.0
y3 120.0
b2 y1 110.0
y2 121.0
y3 132.0
t2 b1 y1 100.0
y2 108.0
y3 115.0
b2 y1 120.0
y2 129.6
y3 138.0
Name: v, dtype: float64