You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多列条件修改Pandas DataFrame的列值?

解决方案

问题分析

你之前的代码存在几个关键问题:

  1. 列名大小写不匹配:原DataFrame的列是小写的division和activity,你写成了大写的Division和Activity,会导致无法定位目标列。
  2. 方法使用逻辑错误:fillna()和replace()默认返回新的DataFrame对象,不会修改原数据;且用and连接两个操作是布尔逻辑误用,二者是独立的赋值动作,不能用布尔运算符关联。
  3. 需求实现方式偏差:你的需求是当division为'BSS'时直接设置activity为'BSS',不管activity是否为NaN,用loc直接赋值比fillna()更精准。

可行代码

直接通过loc进行条件赋值,分别处理两个需求即可(两个条件可同时生效):

import pandas as pd
import numpy as np

df = pd.DataFrame({'entity':['BSS'],
                   'activity':[np.nan],
                   'division':['BSS'],
                   'site':['Tanger']})

# 需求1:当division为'BSS'时,将activity设为'BSS'
df.loc[df['division'] == 'BSS', 'activity'] = 'BSS'

# 需求2:当site为'Tanger'时,将division改为'europe'
df.loc[df['site'] == 'Tanger', 'division'] = 'europe'

# 查看处理后的结果
print(df)

执行后输出结果:

entity activity division    site
0    BSS      BSS   europe  Tanger

补充说明

如果需要更紧凑的写法,也可以把两个赋值操作放在同一代码块,但分开写可读性更强。这种方式能准确覆盖所有符合条件的行,不管两个条件是否同时满足。

内容的提问来源于stack exchange,提问作者Gorkem Tunc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:31:13