Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:查找由开始列和停止列定义的多个范围内的值_Python_Pandas - Fatal编程技术网

Python 熊猫:查找由开始列和停止列定义的多个范围内的值

Python 熊猫:查找由开始列和停止列定义的多个范围内的值,python,pandas,Python,Pandas,我试图使用两列start和stop来定义另一个数据帧的age列中的多个值范围。范围在称为间隔的df中定义: start stop 1 3 5 7 年龄在另一个df中定义: age some_random_value 1 100 2 200 3 300 4 400 5 500 6

我试图使用两列
start
stop
来定义另一个数据帧的
age
列中的多个值范围。范围在称为
间隔的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
间隔
(1-3和5-7)中定义的范围内的值:

我尝试过使用numpy.r_2;,但它并没有像我希望的那样工作:

df.age.loc[pd.np.r_[intervals.start, intervals.stop]]
这将产生:

age  some_random_value
  2                200
  6                600
  4                400
  8                800

任何想法都非常感谢

我认为需要参数
closed='both'
in:

然后选择匹配值:

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]

这个很好用,谢谢!你介意解释一下
!=-1
partin
interval.获取索引器(df.age.values)!=-1
?@Plasma-当然,如果不匹配,则获取
-1
,如果不匹配,则过滤值
-1
,好的,但什么决定值是0还是1?它为每个值间隔范围创建-样本中有2行,因此对于
1-3
创建
0
,对于
5-7
创建
1
,如果有多行,则继续以这种方式执行。哦,ok,不匹配总是-1。谢谢!
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]