python - 根据 pandas 中另一列中存在的条件对列执行 True/False 操作
问题描述
我有一个数据框
df_in = pd.DataFrame([[1,"A",32,">30"],[2,"B",12,"<10"],[3,"C",45,">=45"]],columns=['id', 'input', 'val', 'cond'])
我想根据“cond”列中存在的条件对“val”列执行操作,并在“输出”列中获得真/假结果。
预期输出:
df_out = pd.DataFrame([[1,"A",32,">30",True],[2,"B",12,"<10",False],[3,"C",45,">=45",True]],columns=['id', 'input', 'val', 'cond',"Output"])
怎么做?
解决方案
你可以试试:
df_in['output']=pd.eval(df_in['val'].astype(str)+df_in['cond'])
或者
如果需要性能,请使用以下方法,但也请参阅此线程,但我认为在您的情况下使用是安全的eval
:
df_in['output']=list(map(lambda x:eval(x),(df_in['val'].astype(str)+df_in['cond']).tolist()))
或者
更高效、更快:
from numpy.core import defchararray
df_in['output']=list(map(lambda x:eval(x),defchararray.add(df_in['val'].values.astype(str),df_in['cond'].values)))
输出df_in
:
id input val cond output
0 1 A 32 >30 True
1 2 B 12 <10 False
2 3 C 45 >=45 True
时间比较: using %%timeit -n 1000
推荐阅读
- mongodb - 在 BSON 中解码,这是一个由私有结构实现的接口
- mysql - 计算按国家和日期细分的每个项目的总收入
- javascript - 使用 Gatsby 和 allImageSharp 上下文定位特定文件夹
- c# - C# 两个不同数据库的简单减法
- python - 在运行时获取闭包
- mysql - MySQL;在一个请求中获取与每张卡片相关的所有卡片和所有卡片组
- xamarin - 是否有 API 端点可以通过 REST API(在 C# 中)与 Sharepoint 中的其他用户在线和本地共享元素(文件、项目、站点等)?
- swift - 转换为错误失败,但转换为 NSError 成功
- html - React - dangerouslySetInnerHTML 不显示正确的结果
- swift - Rxswift如何调用1个或多个函数以返回另一个函数