我正在尝试使用两列start
和stop
来定义另一个数据框的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
非常感谢任何想法!
答案 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]