【问题标题】:How to merge two differently multi-indexed dataframes如何合并两个不同的多索引数据框
【发布时间】:2020-01-23 09:03:34
【问题描述】:

我有两个多索引数据框df1 三个级别和df2 两个级别。索引来自df1.groupby([col_1, col_2, col_3])df2.groupby([col_1, col_2])col_1col_2 在两个数据帧中是相同的,但是由于 df1 中的第三层长度不同; df1有 2425 行,df2783。

我要做的是合并两个数据帧,以便 df2 分散开,使索引级别 0 和 1 的长度在 df1df2 中具有相同的长度,以便生成的数据帧也是 2425 行。

我使用了df3 = df1.merge(df2, left_index=True, right_index=True),但生成的数据框仍然只有 2385 行。 我使用了df3 = pd.concat([df1, df2], axis=1),但它引发了ValueError: operands could not be broadcast together with shapes

有没有优雅的方法来解决这个问题?我感谢每一个帮助

编辑:数据样本

df1:

                                                                    Areaclccat1990  ...  Areaclccat2012
FID_Weser_Catchments_134_WQ_Stations_FINAL_LAEA... SNR1 gridcode_1                  ...                
0                                                  3152 1                 0.002764  ...        0.007248
                                                        2                 0.980105  ...        0.972941
                                                        3                 0.005049  ...        0.017166
                                                        4                 0.012082  ...        0.002645
                                                   3155 1                      NaN  ...        0.000003
                                                        2                 1.000000  ...        0.996788
                                                        3                      NaN  ...        0.003209
                                                   3255 1                      NaN  ...        0.058950
                                                        2                 0.989654  ...        0.941050
                                                        4                 0.010346  ...             NaN
                                                   5958 1                      NaN  ...        0.004463
                                                        2                 0.955098  ...        0.958452
                                                        3                 0.014408  ...        0.027835
                                                        4                 0.030494  ...        0.009250
                                                   5966 1                 0.007184  ...        0.011448
                                                        2                 0.955668  ...        0.949824
                                                        3                 0.037148  ...        0.038728
                                                   5970 1                      NaN  ...        0.001141
                                                        2                 0.979750  ...        0.930495
                                                        3                 0.011281  ...        0.068364

df2:

                                                          Areaclccat1990  ...  Areaclccat2012
FID_Weser_Catchments_134_WQ_Stations_FINAL_LAEA... SNR1                   ...                
0                                                  3152      1654.636456  ...     1550.415658
                                                   3155      1820.433231  ...     1758.125539
                                                   3255        43.056576  ...       39.436385
                                                   5958      2306.806057  ...     2120.791289
                                                   5966         7.444977  ...        5.763853
                                                   5970      3087.717009  ...     2615.253450
                                                   6435       240.342745  ...      255.033888
                                                   6534       647.293171  ...      621.116222
                                                   6535      9929.136397  ...     9653.021903
                                                   6611       947.912232  ...      754.783147
                                                   6631     13528.073523  ...    13545.356498
                                                   6632     14023.097062  ...    13897.394309
                                                   6633      5913.895620  ...     5398.585720
                                                   6634     17463.795952  ...    17159.138628
                                                   6635     10791.618411  ...    10306.725199
                                                   6636      9664.138661  ...     9742.442935
                                                   9473       131.268559  ...      128.477078
                                                   9672       107.831005  ...      102.464959
                                                   9673        13.044806  ...       29.566828
                                                   16051      443.810802  ...      428.493495                                                              

【问题讨论】:

    标签: pandas dataframe merge multi-index


    【解决方案1】:

    使用how='left' 将第三级转换为merge 之前的列以进行左连接:

    df3 = df1.reset_index(level=2).merge(df2, left_index=True, right_index=True, how='left')
    

    【讨论】:

    • 我试过了,但基本上和df3 = df1.merge(df2, left_index=True, right_index=True)的情况一样,只剩下2385行,但是增加了2级列
    • @Benno_Banton - 你能添加一些数据样本吗?
    • 我添加了前 20 个条目
    • @Benno_Banton - 如果添加how='left',你能检查答案吗?
    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2021-09-19
    • 2018-03-15
    • 2021-12-04
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多