如何基于条件迭代更新Pandas DataFrame的qualification列值?
按条件替换Pandas DataFrame指定列值的实现方案
不需要迭代DataFrame,Pandas的矢量化操作比循环高效得多,以下两种方法都能满足你的需求:
方法1:使用np.select批量判断赋值
这种方法适合多条件场景,一次性定义所有规则:
import pandas as pd import numpy as np # 假设你的DataFrame名为df # 定义条件列表 conditions = [ # 条件1:qualification为"Not Specified",且Degree和Masters均为1 (df['qualification'] == 'Not Specified') & (df['Degree'] == 1) & (df['Masters'] == 1), # 条件2:qualification为"Not Specified",仅Degree为1 (df['qualification'] == 'Not Specified') & (df['Degree'] == 1) & (df['Masters'] != 1) ] # 定义对应条件的替换值 replace_values = [ "Bachelor's Degree, Post Graduate Diploma, Professional Degree, Master's Degree", "Bachelor's Degree, Post Graduate Diploma, Professional Degree" ] # 执行替换,不符合条件的保持原数值 df['qualification'] = np.select(conditions, replace_values, default=df['qualification'])
方法2:使用df.loc分步赋值
这种方法逻辑更直观,适合分步处理不同规则:
import pandas as pd # 假设你的DataFrame名为df # 先处理Degree和Masters均为1的情况 df.loc[ (df['qualification'] == 'Not Specified') & (df['Degree'] == 1) & (df['Masters'] == 1), 'qualification' ] = "Bachelor's Degree, Post Graduate Diploma, Professional Degree, Master's Degree" # 再处理仅Degree为1的情况 df.loc[ (df['qualification'] == 'Not Specified') & (df['Degree'] == 1) & (df['Masters'] != 1), 'qualification' ] = "Bachelor's Degree, Post Graduate Diploma, Professional Degree"
注意事项
- 优先使用矢量化操作,避免用
iterrows()或apply()这类循环方式,数据量较大时性能差异明显 - 如果有其他边缘情况(比如Masters为1但Degree为0的"Not Specified"行),可以根据需求补充对应的规则
内容的提问来源于stack exchange,提问作者1g0tquestions
相关产品推荐
相关产品推荐

