python - 如何使用循环将多个条件应用于数据帧
问题描述
我有以下数据框
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 列,我要为数据框中设置的每个列对执行此操作,本质上是更新整个数据框。
解决方案
您可以使用.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
推荐阅读
- android-studio - 2021年如何用android studio安装tcpdump并调用packet在android studio上显示
- list - SharePoint 是否有等效的 Microsoft CMD DIR?
- pandas - 按列中的值修改标题名称
- python - 带有激光雷达 (ROS) 的神经网络
- typescript - 你如何用打字稿输入像 const { company } = data 这样的解构变量?
- java - 本机库 net.dll 已在另一个类加载器中加载
- android - 处理 json 到房间数据库实体
- reactjs - 如何使用 React 播放视频
- objective-c - cv::Mat::create 导致错误:(-215:Assertion failed) s >= 0 in function 'setSize'
- go - 如何通过 pgx 构建我的 Go 应用程序以进行交易