我的问题是与这个问题相反的:How to check if any value of a column is in a range (in between two values) in Pandas?
实际上,我在列中有一个范围,我试图从DataFrame中获取特定值的所有行,而不是在我试图与特定范围进行比较的列中有一个值。
data = {'Reward_Level':['0-4','0-4', '5-10', '5-10', '11-16'],
'reward' :['1', '2', '3', '4', '10']}
df = pd.DataFrame(data)
value = 2 # want to return all the rows whose range in 'Reward_Level' covers this value
df = df["How do I do this part?"]
# df >> gives me the rows for ['0-4', '1'] and ['0-4', '2']我知道的方法是将Reward_Level拆分成两个单独的列,然后与最小值进行比较,然后再与最大值进行比较,但是有没有一种方法可以在不将这些列拆分成新列的情况下做到这一点呢?
发布于 2019-10-29 04:57:52
首先使用提取的每个范围的限制创建一个辅助DataFrame:
df2 = df.Reward_Level.str.extract(r'(?P<v1>\d+)-(?P<v2>\d+)').astype('int')由于值将用于数值比较,因此必须将它们转换为int。
然后只使用布尔型索引:
df[df2.v1.le(value) & df2.v2.ge(value)]https://stackoverflow.com/questions/58598149
复制相似问题