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

如何在满足条件时修改DataFrame最后一行的state值?

解决Pandas DataFrame最后一行字段修改问题

原始DataFrame

issue_status   market_phase    state
    10              0          OPEN 
    40              0          INTRA 
    30              0          SCHEDULE 
    20              0          TEMP
    40              0          NULL 

需求

当最后一行满足issue_status == 40且market_phase == 0时,将该行的state字段改为CLOSED。

原代码错误分析

你提供的代码无法运行,主要有两个问题:

  1. 列名拼写错误:DataFrame中的列是state,但代码中误写为market_state,导致无法定位目标列。
  2. loc方法使用不当:df.loc[行条件, 列名]的行条件需要是与DataFrame行数匹配的布尔数组,或者具体的行标签。你直接用df.iloc[-1]['issue_status'] == 40得到的是单个布尔值,无法作为loc的行索引条件。

正确代码实现

方法一:通过行索引定位并判断(直观易懂)

# 获取最后一行的索引
last_index = df.index[-1]
# 判断条件并修改字段
if df.loc[last_index, 'issue_status'] == 40 and df.loc[last_index, 'market_phase'] == 0:
    df.loc[last_index, 'state'] = 'CLOSED'

方法二:用iloc直接操作最后一行

# 检查最后一行的条件
if df.iloc[-1]['issue_status'] == 40 and df.iloc[-1]['market_phase'] == 0:
    # 通过列名获取列索引,修改最后一行的state字段
    df.iloc[-1, df.columns.get_loc('state')] = 'CLOSED'

方法三:用loc结合布尔条件一次性修改

# 构造布尔条件:行是最后一行,同时满足两个字段条件
condition = (df.index == df.index[-1]) & (df['issue_status'] == 40) & (df['market_phase'] == 0)
# 修改符合条件的行的state字段
df.loc[condition, 'state'] = 'CLOSED'

预期输出

issue_status   market_phase    state
        10              0          OPEN 
        40              0          INTRA 
        30              0          SCHEDULE 
        20              0          TEMP
        40              0          CLOSED

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:10:26