2017-03-20 4 views
1

저는 이것이 반복 인 경우 초보자이며 사과드립니다. 정확한 답변을 드릴 수 없으므로 생각하지 않습니다. I 두 dataframes이팬더 시리즈 회원을 기반으로하는 두 개의 데이터 프레임 만들기

는, 제 지역화있다 경제 지표 (DF1)

(index) (index)  2000  2010 Diff 
State Region  
NY  NYC   1000  1100 100 
NY  Upstate  200  270 70 
NY  Long_Island 1700  1800 100 
IL  Chicago  300  500 200 
IL  South   50  35 15 
IL  Suburbs  800  650 -150 

둘째 주 및 지역 목록 (DF2)를 갖는다 :

index State Region 
0  NY  NYC 
1  NY  Long_Island 
2  IL  Chicago 

을 궁극적으로 어떤 I에있는 상태와 지역 사이에 Diff 열에 t-test이 실행되고 에있는 다른 모든 것들은 df2에 포함되지 않습니다. 그러나 그룹을 아직 나눌 수 없었으므로 테스트를 실행할 수 없습니다. (많은)

내 최신 시도는 다음과 같습니다 : 나는 너무 pd.merge을 시도했지만 그것을 얻이 수없는 것

df1['Region', 'State'].isin(df2['Region', 'State']) 

. 멀티 레벨 인덱싱 때문이라고 생각하지만 여전히 상태/지역을 얻는 방법을 모른다. df2. 당신의 도움에 미리

감사합니다,

저에게 당신이 MultiIndexesdifference 필요하고 loc에 의해 선택 보인다

+0

예상되는 출력의 예를 넣을 수 있습니까? –

답변

1

:

print (df1.index) 
MultiIndex(levels=[['IL', 'NY'], ['Chicago', 'Long_Island', 
            'NYC', 'South', 'Suburbs', 'Upstate']], 
      labels=[[1, 1, 1, 0, 0, 0], [2, 5, 1, 0, 3, 4]], 
      names=['State', 'Region']) 

print (df2.index) 
Int64Index([0, 1, 2], dtype='int64', name='index') 

print (df1.index.names) 
['State', 'Region'] 

#create index from both columns 
df2 = df2.set_index(df1.index.names) 
what is same as 
#df2 = df2.set_index(['State','Region']) 

mux = df1.index.difference(df2.index) 
print (mux) 
MultiIndex(levels=[['IL', 'NY'], ['South', 'Suburbs', 'Upstate']], 
      labels=[[0, 0, 1], [0, 1, 2]], 
      names=['State', 'Region'], 
      sortorder=0) 

print (df1.loc[mux]) 
       2000 2010 Diff 
State Region     
IL South  50 35 15 
     Suburbs 800 650 -150 
NY Upstate 200 270 70 

모두 함께 :

df2 = df2.set_index(df1.index.names) 
df = df1.loc[df1.index.difference(df2.index)] 
print (df) 
+0

undestand - 다른 데이터 프레임의 'State', 'Region'열과 함께 색인에 설정된 'State', 'Region'을 비교해야합니까? – jezrael

+0

@jazrael, 네, 댓글을 달았습니다. 두 개의 서로 다른 '주', '지역'그룹의 'Diff'값을 비교하십시오. 그러나 모든 원본 데이터 프레임에는 수백 개의 행이 있으므로 모든 항목을 쓰는 것이 어려울 수 있습니다. 대신 [ 'IL', 'NY'] df1 [ 'State'] 유형의 메소드가 바람직합니다. 감사합니다. – SDS

+0

'[ 'IL', 'NY']'라고 쓰지 않아도됩니다. 마지막으로 필요한 것을 편집하십시오. – jezrael

관련 문제