2017-10-27 3 views
1

의 행보다 큰/작은 내가 2 dataframes이 행을 찾기 :값을 가진 다른 dataFrame

df = pd.DataFrame({'begin': [10, 20, 30, 40, 50], 
        'end': [15, 23, 36, 48, 56]}) 
    begin end 
0  10 15 
1  20 23 
2  30 36 
3  40 48 
4  50 56 

df2 = pd.DataFrame({'begin2': [12, 13, 22, 40], 
         'end2': [14, 13, 26, 48]}) 
    begin2 end2 
0  12 14 
1  13 13 
2  22 26 
3  40 48 

어떻게 DF1의 행 내에있는 DF2의 행을받을 수 있나요? 나는 df2의 각 행을 df1의 모든 행과 비교하기를 원합니다.

begin2 end2 
0  12 14 
1  13 13 
3  40 48 

내가 시도 :

df3 = df2.loc[ (df['begin'] <= df2['begin2']) & (df2['end2'] <= df['end'])] 

을하지만 그것은 단지 행과 requeres dataframes의 같은 크기에 대한 행을 비교입니다

, 내가 같은 DF3 원하는.

답변

1

당신은 applyboolean indexing로 필요

df = df2[df2.apply(lambda x: any((df['begin'] <= x['begin2']) & 
           (x['end2'] <= df['end'])), axis=1)] 
print (df) 
    begin2 end2 
0  12 14 
1  13 13 
3  40 48 

세부 사항 :

print (df2.apply(lambda x: any((df['begin'] <= x['begin2']) & 
           (x['end2'] <= df['end'])), axis=1)) 
0  True 
1  True 
2 False 
3  True 
dtype: bool 
관련 문제