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

Pandas DataFrame条件替换Party字段值失败及性能问题求助

问题解决:Pandas条件替换数据

原代码的问题

  • 效率极低:嵌套循环遍历state和year的每个元素,每次循环都对整个party列执行replace操作,重复操作次数过多,时间复杂度为O(n²)
  • 逻辑错误:
    1. 当year != 2010时,continue会跳过后续的year==2015判断,导致BJP的替换逻辑完全未执行
    2. replace('INC','major',inplace=True)是全局替换,会把所有年份的INC都改成major,没有针对2010年的行做筛选
    3. 列名大小写不匹配:原数据集列名是Party,代码中用df['party']会报错或无法正确定位列

正确解决方案

使用Pandas的布尔索引矢量化操作,直接针对符合条件的行进行赋值,效率高且逻辑准确:

# 统一列名(匹配原数据集的Party列,避免大小写问题)
df.rename(columns={'Party': 'party'}, inplace=True)

# 处理第一个需求:2010年的INC替换为major
# str.strip()处理原数据中Party列的空格(如"INC "这类带空格的情况)
df.loc[(df['year'] == 2010) & (df['party'].str.strip() == 'INC'), 'party'] = 'major'

# 处理第二个需求:2015年的BJP替换为major
df.loc[(df['year'] == 2015) & (df['party'].str.strip() == 'BJP'), 'party'] = 'major'

代码说明

  • df.loc[布尔条件, 列名]:Pandas中针对指定行和列赋值的标准方式,矢量化操作无需循环,效率远高于遍历
  • 两个条件分开处理,逻辑清晰,不会互相干扰
  • str.strip():处理原数据中Party列存在的前后空格问题,确保匹配准确

处理后的结果

yearstatedistrictParty
2010haryanakaithalmajor
2010haryanakaithalbjp
2010haryanakaithalNOTA
2010goapanjiAAP
2010goapanjimajor
2010goapanjiBJP
2013upmeerutmajor
2013upmeerutSP
2015haryanakaithalINC
2015haryanakaithalmajor
2015haryanakaithalAAP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:31:04