如何基于多列条件修改Pandas DataFrame的列值?
解决方案
问题分析
你之前的代码存在几个关键问题:
- 列名大小写不匹配:原DataFrame的列是小写的
division和activity,你写成了大写的Division和Activity,会导致无法定位目标列。 - 方法使用逻辑错误:
fillna()和replace()默认返回新的DataFrame对象,不会修改原数据;且用and连接两个操作是布尔逻辑误用,二者是独立的赋值动作,不能用布尔运算符关联。 - 需求实现方式偏差:你的需求是当
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
相关产品推荐
相关产品推荐

