python - 我可以在没有 for 循环的情况下将函数应用于 Pandas 数据框中的多个列吗?
问题描述
有没有办法在没有循环的情况下将函数应用于 Pandas 数据框中的多个列?例如,给出这个数据框:
df = pd.DataFrame({'id': [1,2,3,4,5,6,7,8,9,10],
'val1': [2,2,np.nan,np.nan,4,1,np.nan,np.nan,np.nan,2],
'val2': [7,0.2,5,8,np.nan,1,0,np.nan,1,1],
})
display(df)
如果我想同时对val1
和val2
列进行操作,我可以执行以下操作。是否有一个单行来替换 for 循环?
f = lambda x: 'ERR' if x < 5 else x
cols = ['val1', 'val2']
for c in cols:
df[c] = df[c].apply(f)
display(df)
解决方案
applymap
df.assign(**df[cols].applymap(f))
id val1 val2
0 1 ERR 7.0
1 2 ERR ERR
2 3 NaN 5.0
3 4 NaN 8.0
4 5 ERR NaN
5 6 ERR ERR
6 7 NaN ERR
7 8 NaN NaN
8 9 NaN ERR
9 10 ERR ERR
mask
df.assign(**df[cols].mask(df[cols] < 5, 'ERR'))
id val1 val2
0 1 ERR 7.0
1 2 ERR ERR
2 3 NaN 5.0
3 4 NaN 8.0
4 5 ERR NaN
5 6 ERR ERR
6 7 NaN ERR
7 8 NaN NaN
8 9 NaN ERR
9 10 ERR ERR
推荐阅读
- file-upload - 多个 HTML 输入类型文件在 IE 中不起作用
- javascript - 处理中的模拟时钟上的数字
- c# - Message=输入字符串的格式不正确。在c#中
- javascript - 文字渐变:跨浏览器换行文字
- outsystems - 如果我们在 Outsystems 中开发网站,那么我们如何将它部署在我们的个人域下,例如 example.com
- javascript - 编写一条语句以在结果中显示正则表达式匹配的日期。注:给定日期按月、日、年顺序排列
- reactjs - 设置状态没有在 Reactjs 中立即更新?
- c# - 将对象项添加到数组会给出错误的结果
- elasticsearch - 弹性搜索脚本小时分钟
- java - Android Studio:打开旧项目,现在重复运行时错误