Pandas:查找由起始列和停止列定义的多个范围内的值

时间:2018-06-06 07:35:04

标签: python pandas

我正在尝试使用两列startstop来定义另一个数据框的age列中的多个值范围。范围在名为intervals的df中定义:

start  stop
    1     3
    5     7

年龄在另一个df中定义:

age  some_random_value
  1                100
  2                200
  3                300
  4                400
  5                500
  6                600
  7                700
  8                800
  9                900
 10               1000

所需输出是age介于intervals(1-3和5-7)中定义的范围之间的值:

age  some_random_value
  1                100
  2                200
  3                300
  5                500
  6                600
  7                700

我尝试过使用numpy.r_,但它不能像我想要的那样工作:

df.age.loc[pd.np.r_[intervals.start, intervals.stop]]

哪个收益率:

age  some_random_value
  2                200
  6                600
  4                400
  8                800

非常感谢任何想法!

1 个答案:

答案 0 :(得分:2)

我认为IntervalIndex.from_arrays中需要参数closed='both'

intervals = pd.IntervalIndex.from_arrays(df2['start'], df2['stop'], 'both')

然后选择匹配值:

df = df[intervals.get_indexer(df.age.values) != -1]
print (df)
   age  some_random_value
0    1                100
1    2                200
2    3                300
4    5                500
5    6                600
6    7                700

<强>详细

print (intervals.get_indexer(df.age.values))
[ 0  0  0 -1  1  1  1 -1 -1 -1]