python - 将运算符作为函数传递给 Pandas 数据框

标签 python pandas conditional-statements series dynamic-execution

我根据阈值从系列中选择数据。

>>> s = pd.Series(np.random.randn(5))
>>> s
0   -0.308855
1   -0.031073
2    0.872700
3   -0.547615
4    0.633501
dtype: float64
>>> cfg = {'threshold' : 0 , 'op' : 'less' }
>>> ops = {'less' : '<', 'more': '>' , 'equal': '==' , 'not equal' : '!='}
>>> ops[cfg['op']]
'<'
>>> s[s < cfg['threshold']]
0   -0.308855
1   -0.031073
3   -0.547615
dtype: float64

我想在最后一行代码中使用 ops[cfg['op']] 而不是 '<'。如果需要,我愿意更改 key 和 ops dict 的值(比如 -lt 而不是 <)。如何做到这一点?

最佳答案

我只关心@cᴏʟᴅsᴘᴇᴇᴅ的回答和@Zero的链接问答...
但这是 numexpr

的替代方案
import numexpr as ne

s[ne.evaluate('s {} {}'.format(ops[cfg['op']], cfg['threshold']))]

0   -0.308855
1   -0.031073
3   -0.547615
Name: A, dtype: float64

作为How to pass an operator to a python function? 的副本关闭后,我重新打开了这个问题。

问题和答案都很棒,我投了赞成票表示感谢。

pandas.Series 的上下文中提问可以使用包含 numpynumexpr 的答案。而试图用这个答案来回答重复目标纯粹是胡说八道。

关于python - 将运算符作为函数传递给 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46421521/

相关文章:

python - 根据Python中groupby的第一个和最后一个值的条件创建一个新列

python - 在我的代码中索引错误行 13。列表索引超出范围

python - 需要按最后 5 个日期时间(时间戳)选择 pandas.DataFrame 的行

python - 将 pandas 数据框中的值组合为字符串

python - 查找所有 Panda 数据帧的最小索引

php - if else 条件不适用于 php 中的数组值

javascript - 允许在 url 末尾为 javascript 条件 css 样式使用通配符

python - 如何从 Firebase 实时数据库获取最新记录

python - 根据 2 个条件替换 Df 中的值

python - 使用现有数据帧的键作为列名称生成新的数据帧