python - 如何检查特定列中的范围是否涵盖 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
分成两个单独的列并与最小值进行比较,然后与最大值进行比较,但是有没有办法做到这一点而不将它们分成新的列?
解决方案
首先创建一个辅助 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)]
推荐阅读
- android - 如果设备有两个 SIM 卡,是否可以使用 cordova 插件获得两个 IMEI 号码?
- visual-studio - 如何在 Visual Studio 中获取 WorkFlowActivityBase 类?
- powershell - powershell 不能使用删除别名
- replace - notepad ++如何在以下单词后插入替换
- c - 如何让程序每秒运行不同的东西?
- java - 无法让 .edit() 和 .apply() 更新值
- javascript - spring boot 获取复选框值
- java - 如何在android studio中计算位图图像的SHA-256?
- java - 如何在Android中删除视图与其轮廓边框之间的多余空格?
- ios - 更改编码器格式版本