我尝试使用两列 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
所需的输出是年龄
在间隔
中定义的范围(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
非常感谢任何想法!
最佳答案
我相信 IntervalIndex.from_arrays
中需要参数 close='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]
关于python - Pandas:查找由开始列和停止列定义的多个范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50714700/