我有 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 中位于 df1 行内的行?我希望将 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'] )]
但它仅逐行比较并要求相同大小的数据帧。
最佳答案
您需要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
关于python - 查找值小于/大于另一个数据帧的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46972640/