首页 > 解决方案 > 将数据帧合并到多索引数据帧

问题描述

我有一个如下所示的数据框,它表明第 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

我怎样才能做到这一点?

非常感谢您提前提供的帮助。

标签: pythonpandasdataframemulti-index

解决方案


使用mergestack

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

推荐阅读