2016-11-07 7 views
23

Привет У меня есть следующие dataframes:питон (панды) объединить два dataframes по индексу

> df1 
    id begin conditional confidence discoveryTechnique 
0 278 56  false  0.0     1 
1 421 18  false  0.0     1 

> df2 
    concept 
0 A 
1 B 

как я сливаю на индексах, чтобы получить:

id begin conditional confidence discoveryTechnique concept 
0 278 56  false  0.0     1 A 
1 421 18  false  0.0     1 B 

я спрашиваю, потому что это мое понимание что merge() т.е. df1.merge(df2) использует столбцы сделать matching.In факт делает это я получаю:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge 
    copy=copy, indicator=indicator) 
    File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge 
    copy=copy, indicator=indicator) 
    File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__ 
    self._validate_specification() 
    File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification 
    raise MergeError('No common columns to perform merge on') 
pandas.tools.merge.MergeError: No common columns to perform merge on 

Неужели плохая практика сливается по индексу? Это невозможно? Если это так, я могу перенести индекс в новый столбец с именем «index»?

Благодаря

+1

попробуйте следующее: 'df1.join (df2)' – MaxU

ответ

51

Использование merge, по умолчанию есть внутреннее соединение:

pd.merge(df1, df2, left_index=True, right_index=True) 

Или join, по умолчанию там осталось присоединиться:

df1.join(df2) 

Или concat, по умолчанию есть внешнее соединение:

pd.concat([df1, df2], axis=1) 
+1

спасибо! Я использовал «merge» и идеально подходит для меня. – brucezepplin

+1

приятно. для других, читающих это, если он не работает, посмотрите, нужно ли вам '.transpose()' один из ваших dfs синхронизировать индексы - это была моя проблема. – Jona

13

вы можете использовать concat([df1, df2, ...], axis=1) для того, чтобы объединить два или более ДФЕ выровненные индексами:

pd.concat([df1, df2, df3, ...], axis=1) 

или merge для конкатенации с помощью пользовательских полей/индексов:

# join by _common_ columns: `col1`, `col3` 
pd.merge(df1, df2, on=['col1','col3']) 

# join by: `df1.col1 == df2.index` 
pd.merge(df1, df2, left_on='col1' right_index=True) 

или join для присоединения индекса:

df1.join(df2) 
+0

очень благодарен - спецификация столбца для слияния полезна. – brucezepplin

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