Python 熊猫:连接数据帧并保留重复索引

Python 熊猫:连接数据帧并保留重复索引,python,pandas,concat,Python,Pandas,Concat,我有两个数据帧,我想用一个内部连接将它们按列(axis=1)连接起来。其中一个数据帧有一些重复的索引,但行不是重复的,我不想丢失这些数据: df1 = pd.DataFrame([{'a':1,'b':2},{'a':1,'b':3},{'a':2,'b':4}], columns = ['a','b']).set_index('a') df2 = pd.DataFrame([{'a':1,'c':5},{'a':2,'c':6}],columns = [

我有两个数据帧,我想用一个内部连接将它们按列(axis=1)连接起来。其中一个数据帧有一些重复的索引,但行不是重复的,我不想丢失这些数据:

df1 = pd.DataFrame([{'a':1,'b':2},{'a':1,'b':3},{'a':2,'b':4}],
                   columns = ['a','b']).set_index('a')

df2 = pd.DataFrame([{'a':1,'c':5},{'a':2,'c':6}],columns = ['a','c']).set_index('a')

>>> df1
   b
a   
1  2
1  3
2  4
8  9

>>> df2
   c
a   
1  5
2  6
默认的
concat
行为是用NAN填充缺少的值:

>>> pd.concat([df1,df2])
    b   c
a
1   2 NaN
1   3 NaN
2   4 NaN
1 NaN   5
2 NaN   6
我想保留来自df1的重复索引,并用来自df2的重复值填充它们,但在0.13.1中,列上的内部联接会产生错误。在熊猫的最新版本中,concat实现了我想要的:

>>> pd.concat([df1, df2], axis=1, join='inner')
   b  c
a      
1  2  5
1  3  5
2  4  6

达到我想要的结果的最好方法是什么?是否有groupby解决方案?或者我根本不应该使用
concat

您可以执行合并并设置参数以使用lhs和rhs中的索引:

In [4]:    
df1.merge(df2, left_index=True, right_index=True)
Out[4]:
   b  c
a      
1  2  5
1  3  5
2  4  6

[3 rows x 2 columns]
Concat应该有用的,它对我有用:

In [5]:

pd.concat([df1,df2], join='inner', axis=1)
Out[5]:
   b  c
a      
1  2  5
1  3  5
2  4  6

[3 rows x 2 columns]

我会用pd.merge代替你运行的是什么版本?我正在运行
0.14.0
哦,真的吗?我正在运行0.13.1。很高兴他们显然在0.14.0中解决了这个问题。我将在升级前后测试您的解决方案,完成后接受。谢谢好的,合并在0.13.1和0.14.0中都可以工作,所以感谢您提供的解决方案。Concat在0.13.1中给了我“无法从重复索引中重新索引”错误,在0.14.0中我得到:“ValueError:传递值的形状是(2,5),索引暗示(2,3)”。我想知道为什么。。。?我运行的是python 3.3.5。@BeoneTraveler不确定我运行的是numpy 1.8.1和python 64位3.3。我的版本是0.16.2,使用多索引,没有一个解决方案对我不起作用;“合并”提供了一个数据帧作为输出,但左数组中有许多列作为NaN,它们不应该是。@IgorFobia如果你有问题,然后发布一个问题,你的情况与这里不同,因此不是一个论坛,我无法帮助你,因为它对我不起作用