2014-07-10 3 views
4

내부 조인과 함께 열 단위 (축 = 1)로 연결하려는 두 개의 데이터 프레임이 있습니다. dataframes 중 하나는 일부 중복 인덱스를 가지고 있지만, 행이 중복되지 않습니다, 나는 그에서 데이터를 잃고 싶지 않아 :팬더 : 데이터 프레임 연결 및 중복 인덱스 유지

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을 전혀 사용하지 않아야합니까?

+1

내가 사용하는 것 대신 pd.merge – ZJS

+0

어떤 판다를 실행하고 있습니까? 나는'0.14.0'을 달리고있다. – EdChum

답변

3

당신은 병합을 수행하고 LHS와 RHS에서 인덱스를 사용하도록 PARAMS을 설정할 수 있습니다

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] 
+0

정말? 나는 0.13.1을 달리고있다. 그들이 0.14.0에서 이것을 수정 한 것 같습니다. 업그레이드 전후에 솔루션을 테스트하고 완료되면 동의합니다. 감사! – andbeonetraveler

+0

좋습니다, merge는 0.13.1과 0.14.0에서 모두 작동합니다. 따라서이 솔루션에 감사드립니다. Concat은 0.13.1에서 '중복 색인에서 다시 색인 할 수 없습니다.'라는 오류를 표시하고 0.14.0에서 'ValueError : 전달 된 값의 모양은 (2, 5)이고 인덱스는 (2, 3)'을 의미합니다. 나는 왜 ...? 파이썬 3.3.5를 실행 중입니다. – andbeonetraveler

+0

@andbeonetraveler 잘 모르겠다. numpy 1.8.1과 python 64-bit 3.3 – EdChum

관련 문제