考虑这样一个查找表:
lower_bound upper_bound category
0 3 6 A
1 10 40 B
2 80 200 C
3 350 600 D
4 900 1500 E
然后,有一个我们需要根据上述条件对元素进行分类的DataFrame:
id value
0 id_1 20
1 id_2 500
2 id_3 1000
这些项将根据它们的值进行分类,这些值应该在查找表中存在的指定范围之间。所以:
id value category
0 id_1 20 B
1 id_2 500 D
2 id_3 1000 E
我尝试了下面的方法,它可以工作:
conditions = []
choices = []
for condition in lookup_df.to_dict('records'):
conditions.append(
(df['value'].between(condition['lower_bound'], condition['upper_bound']))
)
choices.append(condition['category'])
,然后:
df['category'] = np.select(conditions, choices, default=np.nan)
是否有一种方法来生成条件,而不转换为字典和循环查找DataFrame?
您可以使用np.dot
:
vals = np.vstack(df['value'].values)
lb = condition['lower_bound'].values <= vals
ub = vals <= condition['upper_bound'].values
df['category'] = np.dot(lb & ub, condition['category'])
输出:
类别th>D
您可以使用pd.merge_asof
:
output = pd.merge_asof(df, lookup_df[["lower_bound","category"]], left_on="value", right_on="lower_bound").drop("lower_bound", axis=1)
>>> output
id value category
0 id_1 20 B
1 id_2 500 D
2 id_3 1000 E
可以使用numpy广播。这个想法是创建一个布尔掩码,为范围each "value"返回True落入lookup_df
。然后使用布尔索引选择匹配的值。
vals = df['value'].to_numpy()
msk = (lookup_df[['lower_bound']].to_numpy() < vals) & (vals < lookup_df[['upper_bound']].to_numpy())
df['category'] = lookup_df[['category']].to_numpy().repeat(len(df), axis=1)[msk]
输出:
id value category
0 id_1 20 B
1 id_2 500 D
2 id_3 1000 E
如果您想要NaN值在任何范围之外的值,dot
产品将在这里工作得最好(这与@Corralien的解决方案完全相同):
vals = df[['value']].to_numpy()
msk = (lookup_df['lower_bound'].to_numpy() < vals) & (vals < lookup_df['upper_bound'].to_numpy())
df = df.assign(category=msk.dot(lookup_df['category'])).replace('', float('nan'))
相关内容
- 使用列式Pandas数据框架数据格式生成分层树结构
- 机器人框架:数据驱动程序库没有从csv文件中找到变量
- 我如何在实体框架数据首先使用FromSqlRaw从查找表引用字段?
- R -我如何添加列到数据框架/数据.基于包含日期序列的矢量值的表
- 将自定义多时间框架数据导入backtrader
- 实体框架数据迁移
- 实体框架数据读取器与带空格的列名不兼容(数据库优先)
- 错误 找不到请求的 .Net 框架数据提供程序。它可能未安装。
- Django REST框架数据表中的外键值
- 安装光栅框架(数据块)的Java错误
- 实体框架数据插入,嵌套对象具有一个请求的自动递增主键
- Django REST框架:数据不发布到数据库
- 我应该在实体框架数据访问层中存储硬编码数据吗
- Pandas数据框架数据透视表,列按日期时间范围排序
- 实体框架数据持久性
- 将 Django rest 框架数据转换为 JavaScript 数组时缺少值
- 安装机器人框架-数据驱动程序 0.3.3,但出现以下错误:"python setup.py egg_info"失败,错误代码为 1
- 如何使用Audit.NET实体框架数据提供程序保存Audit.NET WebAPI审核日志
- 无法实现 IDbContextFactory 以用于实体框架数据迁移
- 类星体框架数据表 Laravel服务器分页不起作用
最新更新
- vsto Outlook插件在Outlook 2016和Office 365中的行为不同
- npm install不会在我的React项目中安装任何node模块
- 用两次检查遍历两个列表
- 将图像转换为RGB格式的文本文件,格式为三逗号分隔
- 我正试图找到一种方法将TimeSpan变量转换为秒的整数量
- FCM云消息传递验证令牌
- C多重间接
- 显示数组中元素的倒计时。setInterval 不会导致延迟。最后一个元素立即显示
- sveltekit:等待来自+服务器的数据.t加载函数
- JQuery是:检查每次点击返回两个值
- RxJS中具有共享结果的请求队列
- Beautifulsoup如何添加一些东西到列,如果元素没有显示
- 在Jekyll blog中按2D位置(距离)搜索
- Robocopy在复制过程中向文件名添加日期
- c -间接递归的用例
- 如何将日期对象转换为格式(DD-MM-YYYY)
- 如何从没有使用python硒链接的网站下载文件?
- 用错误处理循环捕获用户输入的最佳方法
- 如何使用内部连接在php发送值从下拉菜单到数据库的两个不同的表
- 我如何得到一个状态的IISreset - true,如果它是启动和false,如果它是停止
- 如何复制列标题"Testing"的列
- 读取文件夹中的多个DOCX文件到多个dataframe时出错
- 无法下载InceptionV3 Keras
- 如何打印数据在模板django的一个不同的表由外键连接?
- 动态导航菜单超时功能未清除
- 如何使用EPPlus 6.1.3将图表系列分配到辅助Y轴?
- 如何使用R来合并冗余信息?
- c# Maui应用程序不使用本地ASP.. NET核心Web API
- 使用 JavaScript 中的日期时间运行行<title>
- r语言 - 如何添加四分位数/IQR到tab_stat_fun?
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium