2017-10-27 11 views
1

の行よりも大きい/小さい私は2つのデータフレームを持つ行を検索:値を持つ別のデータフレーム

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のすべての行と比較する必要があります。

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

をしかし、それは唯一の行の行を比較し、データフレームの同じサイズをrequeres:

begin2 end2 
0  12 14 
1  13 13 
3  40 48 

私が試した:私のような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 
関連する問題