如何使用循环将多个条件应用于数据帧
Posted
技术标签:
【中文标题】如何使用循环将多个条件应用于数据帧【英文标题】:How to apply multiple conditions to dataframe with loop 【发布时间】:2021-11-23 18:56:20 【问题描述】:我有以下数据框
dict1 = 'x_math_lp': 'John':'0',
'Lisa': 1,
'Karyn': '2',
'o_math_lp': 'John': 0.005,
'Lisa': 0.001,
'Karyn':0.9
df= pd.DataFrame(dict1)
我想应用一个条件,如果第一列中的值小于 1,并且第二列中的值 >= 0.05,则将第一列中的值替换为“NaN”
结果应该是这样的
x_math_lp o_math_lp
John NaN 0.005
Lisa 1 0.001
Karyn NaN 0.900
注意:我想使用循环的原因是因为我的真实数据帧有 30 列,我要为数据帧中设置的每个列对执行此操作,本质上是更新整个数据帧。
【问题讨论】:
【参考方案1】:您可以将.loc
用于您想要的列并检查您的状况,如下所示。 (因为x_math_lp
中的某个数字是str
你可以使用pd.to_numeric
)
试试这个:
>>> import numpy as np
>>> df.x_math_lp = pd.to_numeric(df.x_math_lp, errors='coerce')
>>> df.loc[((df['x_math_lp'] < 1) | (df['o_math_lp'] >= 0.005)), 'x_math_lp'] = np.nan
>>> df
x_math_lp o_math_lp
John NaN 0.005
Lisa 1 0.001
Karyn NaN 0.900
如果你想为每个列对在多个列上运行,你可以使用这个:
>>> df= pd.DataFrame('x_math_lp': 'John': 0,'Lisa': 1,'Karyn': 2,'o_math_lp': 'John': 0.005,'Lisa': 0.001,'Karyn':0.9,'y_math_lp': 'John': 0,'Lisa': 1,'Karyn': 2,'p_math_lp': 'John': 0.005,'Lisa': 0.001,'Karyn':0.9)
>>> columns = df.columns
>>> for a,b in zip(columns[::2],columns[1::2]):
... df.loc[((df[a] < 1) | (df[b] >= 0.005)), a] = np.nan
>>> df
x_math_lp o_math_lp y_math_lp p_math_lp
John NaN 0.005 NaN 0.005
Lisa 1.0 0.001 1.0 0.001
Karyn NaN 0.900 NaN 0.900
【讨论】:
感谢您的回复。结果是正确的,但如果 df['o_math_lp'] 小于零,则不适用条件。这两个条件都需要满足,然后我们更新第一列。 第一个条件是否缺失?df.loc[(df['x_math_lp'] < 1) | (df['o_math_lp'] >= 0.005), 'x_math_lp'] = np.nan
。 (他用“和”解释了他的问题,但我根据预期输出输入了or
运算符。)
@OnurOdabaşı 谢谢你的评论
非常感谢你们,我将尝试使用它来生成一个循环来处理我的整个数据集。以上是关于如何使用循环将多个条件应用于数据帧的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有不同参数的多个sklearn算法应用于多个数据帧?