首页 > 解决方案 > 根据 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"])

怎么做?

标签: pythonpython-3.xpandasdataframe

解决方案


你可以试试:

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

在此处输入图像描述


推荐阅读