2016-04-11 2 views
14

У меня есть два кадра данных, каждый из которых имеет два столбца индекса. Я хотел бы объединить их. Например, первый dataframe является следующее:Слияние данных с индексами в PANDAS

     V1 

    A  1/1/2012 12 
      2/1/2012 14 
    B  1/1/2012 15 
      2/1/2012 8 
    C  1/1/2012 17 
      2/1/2012 9 

Второй dataframe заключается в следующем:

     V2 

    A  1/1/2012 15 
      3/1/2012 21    
    B  1/1/2012 24 
      2/1/2012 9 
    D  1/1/2012 7 
      2/1/2012 16 

и как результат я хотел бы получить следующее:

     V1 V2 

    A  1/1/2012 12 15 
      2/1/2012 14 N/A 
      3/1/2012 N/A 21   
    B  1/1/2012 15 24 
      2/1/2012 8 9 
    C  1/1/2012 7 N/A 
      2/1/2012 16 N/A 
    D  1/1/2012 N/A 7 
      2/1/2012 N/A 16 

I попробовали несколько версий usig pd.merge и .join, но ничего не работает. Есть ли у вас какие-либо предложения? Большое спасибо.

+0

Попробуйте pd.concat ... это должно сработать. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html .. вы можете выбрать ось, по которой вы хотите присоединиться к данным. – Joey

ответ

18

Вы должны быть в состоянии использовать join, который присоединяется по индексу по умолчанию. Учитывая желаемый результат, вы должны использовать outer как тип соединения.

>>> df1.join(df2, how='outer') 
      V1 V2 
A 1/1/2012 12 15 
    2/1/2012 14 NaN 
    3/1/2012 NaN 21 
B 1/1/2012 15 24 
    2/1/2012 8 9 
C 1/1/2012 17 NaN 
    2/1/2012 9 NaN 
D 1/1/2012 NaN 7 
    2/1/2012 NaN 16 

Подпись: _.join (другой, на = None, как = 'левого', lsuffix = '', rsuffix = '', вроде = False) : строки документации столбцов с другим DataFrame либо по индексу, либо по ключу . Эффективно Присоединяйте несколько объектов DataFrame по индексу за один раз на , передавая список.

+0

Это работает, спасибо! – km1234

5

Вы можете сделать это с merge:

df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True) 

Ключевое слово аргумент how='outer' сохраняет все индексы от обоих кадров, восполнение недостающих индексов с NaN. Аргументы ключевого слова left_index и right_index имеют слияние по индексам. Если вы получите все NaN в столбце после слияния, другим шагом по устранению неполадок является проверка того, что ваши индексы имеют то же самое значение dtypes.

merge выше код производит следующий вывод для меня:

   V1 V2 
A 2012-01-01 12.0 15.0 
    2012-02-01 14.0 NaN 
    2012-03-01 NaN 21.0 
B 2012-01-01 15.0 24.0 
    2012-02-01 8.0 9.0 
C 2012-01-01 17.0 NaN 
    2012-02-01 9.0 NaN 
D 2012-01-01 NaN 7.0 
    2012-02-01 NaN 16.0 
+0

Это тоже работает, спасибо! – km1234

Смежные вопросы