我有两个具有三个级别的多索引数据帧df1
和具有两个级别的df2
。索引来自df1.groupby([col_1, col_2, col_3])
和df2.groupby([col_1, col_2])
。 col_1
和col_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:
答案 0 :(得分:1)
将第三级转换为merge
到how='left'
之前的列以进行左连接:
df3 = df1.reset_index(level=2).merge(df2, left_index=True, right_index=True, how='left')