如何根据Europe行的列值条件替换DataFrame中的非NaN值?
解决方案
可以通过两步向量化操作高效实现需求,避免循环提升性能:
- 筛选出Europe行值为0的目标列:
cols_to_modify = df.columns[df.loc['Europe'] == 0]
- 对目标列执行替换:保留
None值,将所有非None值替换为0:
# 方法1:用numpy实现向量化替换 import numpy as np df[cols_to_modify] = np.where(df[cols_to_modify].isna(), df[cols_to_modify], 0) # 方法2:用pandas原生方法实现,写法更统一 df[cols_to_modify] = df[cols_to_modify].mask(df[cols_to_modify].notna(), 0)
执行结果验证
处理后得到的DataFrame与预期完全一致:
| Monday | Tuesday | Wednesday | Thursday | Friday | |
|---|---|---|---|---|---|
| Europe | 10 | 0 | 0 | 10 | 10 |
| France | 5 | None | 0 | 3 | 4 |
| Germany | 4 | None | 0 | 3 | 4 |
| Spain | 1 | 0 | 0 | 4 | 2 |
内容的提问来源于stack exchange,提问作者Lucas B. Bahadir
相关产品推荐
相关产品推荐

