Как объединить два по-разному мультииндексированных фрейма данных - PullRequest
1 голос
/ 23 сентября 2019

У меня есть два мультииндексированных фрейма данных 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 и df2, поэтому результирующий кадр данных также имеет 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                                                              

1 Ответ

1 голос
/ 23 сентября 2019

Преобразуйте третий уровень в столбец перед merge с how='left' для левого соединения:

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