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
partininterval.获取索引器(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]