python - 根据另一列的值更改相邻列的值
问题描述
我有以下数据框:
A1 A2 B1 B2
0 10 20 20 NA
1 20 40 30 No
2 50 No 50 10
3 40 NA 50 20
每当 A2 列中的对应值为 No 或 NA 时,我想将 A1 列中的值更改为 NaN。B1 也一样。
注意:这里的 NA 是一个字符串对象,而不是 NaN。
A1 A2 B1 B2
0 10 20 NaN NA
1 20 40 NaN No
2 NaN No 50 10
3 NaN NA 50 20
解决方案
使用 ifNA
和No
are 字符串Series.isin
在DataFrame.loc
or 中使用:
df.loc[df.A2.isin(['NA','No']), 'A1'] = np.nan
df['A1'] = df['A1'].mask(df.A2.isin(['NA','No']))
如果NA
缺少值,请通过以下方式对其进行测试Series.isna
:
df.loc[df.A2.isna() | df.A2.eq('No'), 'A1'] = np.nan
或者:
df['A1'] = df['A1'].mask(df.A2.isna() | df.A2.eq('No'))
推荐阅读
- c++ - 为什么我得到“候选构造函数不可行”?
- html - 在移动视图中引导 4 张单独的卡片?
- java - JADE IPMS:代理迁移失败
- swift - 无法以编程方式将情节提要中的颜色集更改为 xcassets 目录中的颜色
- python - 使用 f String 插入字符或符号@
- c++ - 如何在 C++ arduino 中从字符串中拆分特定部分
- opendaylight - 铍发布无法在 Web 界面上登录 (http://10.10.10.2:8181/index.html)
- angular - Angular 7 - 未捕获(承诺):错误:StaticInjectorError(AppModule)[BASE_URL]
- javascript - 为什么我的 Jest 测试通过然后在创建 TypeError 之后调用该函数
- python - Python - Croniter - 必须为迭代器表达式指定正好 5 或 6 列