【问题标题】:merging dataframes to a multiindex dataframe将数据帧合并到多索引数据帧
【发布时间】:2018-11-19 02:35:40
【问题描述】:

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

我怎样才能做到这一点?

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

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    stack 之后使用merge

    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
    

    【讨论】:

    • 谢谢@W-B。我稍微修改了这个问题。如果可能的话,你介意回答那部分吗?我想到的是重新索引 df1 以包含所有 df2 索引,然后执行您建议的过程。这听起来合理吗?
    • @Ali 在上述代码 df2=df2.reindex(df1.index,fill_value=1) 之前这样做
    猜你喜欢
    • 2020-12-21
    • 2021-01-10
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多