Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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_Python 3.x_Pandas - Fatal编程技术网

Python 范围查找过滤

Python 范围查找过滤,python,python-3.x,pandas,Python,Python 3.x,Pandas,我的数据如下所示: import pandas as pd pd.DataFrame({ 'x_range':['101-200','101-200','201-300','201-300'], 'y':[5,6,5,6], 'z': ['Cat', 'Dog', 'Fish', 'Snake'] }) 我应该如何过滤适合x_范围内的x值和y值以返回适当的z值?例如,如果x=248,y=5,我想返回Fish…简单的过滤练习: 保存数据帧: df['x_range_

我的数据如下所示:

import pandas as pd

pd.DataFrame({
    'x_range':['101-200','101-200','201-300','201-300'], 
    'y':[5,6,5,6], 
    'z': ['Cat', 'Dog', 'Fish', 'Snake']
})

我应该如何过滤适合x_范围内的x值和y值以返回适当的z值?例如,如果x=248,y=5,我想返回Fish…

简单的过滤练习:

保存数据帧:

df['x_range_start'] = [int(i.split('-')[0]) for i in df.x_range]
为范围开始和结束添加两列:

df['x_range_start'] = [int(i.split('-')[0]) for i in df.x_range]
df['x_range_end'] = [int(i.split('-')[1]) for i in df.x_range]
筛选以查找值:

x_value = 113
y_value = 5

df[(df.x_range_start <= x_value) &(x_value <= df.x_range_end)][df.y == y_value]['z']

我不喜欢这个,但我拼凑了一个解决方案:

拆分:

df['low'], df['high'] = df['x_range'].str.split('-', 1).str
df['low'] = pd.to_numeric(df['low'])
df['high'] = pd.to_numeric(df['high'])
过滤器:

x = 248
y = 6
row = df[(pd.Series.between(x, left=df.low, right=df.high, inclusive=True)) & 
(df.y == y)]
row['z']

重要的是:我不想匹配x='101-200'和y=5。我的x值大约是113或248。为什么不将这些值作为第三列添加到数据框中呢?