2016-11-07 105 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 

在索引上合并是不好的做法吗?这是不可能的吗?如果是这样的话,我可以将索引转换成一个名为“索引”的新列吗?

感谢

+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

谢谢!我用'合并',对我来说很完美。 – brucezepplin

+1

不错。对于其他读者来说,如果它不工作,看看你是否需要'.transpose()'你的一个dfs同步索引 - 这是我的问题 – Jona

13

可以使用concat([df1, df2, ...], axis=1)以串联的指标排列的两个或两个以上的DF:

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