首页 > 解决方案 > 过滤pandas DataFrame中给定值介于两列值之间的所有行

问题描述

我已经有这个包含两列浮点数的数据帧,我想根据这个值 10.9 提取一个数据帧,它不在数据帧上,这样它将返回 10.9 范围内的数据帧,请看下表

   Words    Start_time(in sec)  End_time(in secs)   Time_per_words
0   let         0.1                 2.5                2.6
1   me          2.5                 2.6                5.1
2   tell        2.6                 2.9                5.5
3   you         2.9                 3.0                5.9
4   about       3.0                 3.2                6.2
5    4          10.7                11.0               21.7

预期结果:当我用 3.10 过滤时,我想在下面得到这个数据框,提前谢谢你

   Words    Start_time(in sec)  End_time(in secs)   Time_per_words
4   4           10.7                11.0               21.7

标签: pythonpandasdataframe

解决方案


如果您打算经常执行此操作,请构建一个IntervalIndex :

val = 3.1
idx = pd.IntervalIndex.from_arrays(
    df['Start_time(in sec)'], df['End_time(in secs)'])

idx.contains(val)
#  array([False, False, False, False,  True])

df[idx.contains(val)]  

   Words  Start_time(in sec)  End_time(in secs)  Time_per_words
4  about                 3.0                3.2             6.2

否则,这个一次性布尔索引操作就足够了:

df[(df['Start_time(in sec)'] <= val) & (val <= df['End_time(in secs)'])]

   Words  Start_time(in sec)  End_time(in secs)  Time_per_words
4  about                 3.0                3.2             6.2

推荐阅读