如何合并两个不同的多索引数据帧

时间:2019-09-23 10:02:56

标签: pandas dataframe merge multi-index

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

我要做的是合并两个数据帧,以使df2散布起来,以使索引级别0和1的长度在df1和{{1}中具有相同的长度},以使结果数据框也为2425行。

我使用了df2,但是结果数据帧仍然只有2385行。 我使用了df3 = df1.merge(df2, left_index=True, right_index=True),但它引发了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:

1 个答案:

答案 0 :(得分:1)

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

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