查找其值小于/大于另一个dataFrame的行的行

时间:2017-10-27 10:11:24

标签: python pandas

我有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

如何获取df2行中的df2行?我希望将df2的每一行与df1的所有行进行比较。

也就是说,我想要像df3一样:

   begin2  end2
0      12    14
1      13    13
3      40    48

我试过了:

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

但它只比较行和行重新排列相同大小的数据帧。

1 个答案:

答案 0 :(得分:1)

apply需要boolean 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