首页 > 解决方案 > 遍历数据框中的所有行并根据比较其他列生成新列

问题描述

我有以下数据框:

ID 姓名 价值 意思是 性病 降低
894.68 154.00 2.33 203.16 189.18
1045.28 196.17 4.50 204.00 186

对于每一行,我试图通过比较valuewith来创建一个新列upperlower如下所示:

df['new_col'] = df[df['mean'].notnull()].apply(lambda x: False if x['value']>x['upper'] or x['value']<x['lower'] else True)

它给了我一个我不清楚的错误:KeyError: 'value'. 估计是找不到了x['value']吧?我如何解决它?

标签: pythonpandasdataframe

解决方案


尝试直接输入您的条件,这将直接为您提供布尔系列:

df['new_col'] = (~((df['value']>df['upper']) | (df['value']<df['lower'])) & df['mean'].notnull())

或者

viaapply()但它会很慢,因为它在引擎盖下是循环的,所以通过axis=1

df['new_col'] = df[df['mean'].notnull()].apply(lambda x: False if x['value']>x['upper'] or x['value']<x['lower'] else True,axis=1)

输出df

     ID     name    value   mean    std     upper   lower   new_col
0   NaN     NaN     894.68  154.00  2.33    203.16  189.18  False
1   NaN     NaN     1045.28 196.17  4.50    204.00  186.00  False

推荐阅读