首页 > 解决方案 > 如何检查特定列中的范围是否涵盖 Pandas 中的特定值?

问题描述

我的问题是这个问题的反面: 如何检查一列的任何值是否在 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分成两个单独的列并与最小值进行比较,然后与最大值进行比较,但是有没有办法做到这一点而不将它们分成新的列?

标签: pythonpandas

解决方案


首先创建一个辅助 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)]

推荐阅读