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

如何修改DataFrame切片对应的原DataFrame中指定列的值?

问题描述

我执行以下代码筛选DataFrame的切片:

market_info_df.loc[(market_info_df['issue_status'] == '10') & (market_info_df['market_phase'] == '0') & (market_info_df['trading_state'] == '  ')].iloc[0]

得到的切片内容如下:

activity                                          0
msg_original_type                                 0
sequence_no                                       0
system_event                                       
timestamp                2021-12-13 15:17:28.593198
trading_status                                    1
market_state                                   None

我想把原market_info_df中该切片对应的market_state值改为OPENING_AUCTION,尝试了以下代码:

first_row = market_info_df.loc[(market_info_df['issue_status'] == '10') & (market_info_df['market_phase'] == '0') & (market_info_df['trading_state'] == '  ')].iloc[0]

first_row['market_state'] = 'OPENING_AUCTION' 

但执行print(market_info_df)后发现原DataFrame里的对应值没改,只改了first_row这个切片对象的值,请问怎么直接修改原DataFrame的对应值?

解决方案

你之前的代码里,loc[...]].iloc[0]返回的是原DataFrame的副本而非视图,所以修改副本不会影响原DataFrame。要直接修改原数据,可采用以下两种方法:

方法1:直接用loc定位行和列

将筛选条件与目标列名组合,直接赋值修改原DataFrame:

market_info_df.loc[
    (market_info_df['issue_status'] == '10') & 
    (market_info_df['market_phase'] == '0') & 
    (market_info_df['trading_state'] == '  '),
    'market_state'
] = 'OPENING_AUCTION'

该方法会直接修改所有符合条件行的market_state列,若你确认只有一行符合条件,这是最直接的方式。

方法2:获取目标行索引后赋值

先提取符合条件行的索引,再通过索引定位修改:

# 获取符合条件行的索引
target_index = market_info_df.loc[
    (market_info_df['issue_status'] == '10') & 
    (market_info_df['market_phase'] == '0') & 
    (market_info_df['trading_state'] == '  ')
].index[0]

# 通过索引修改原DataFrame的值
market_info_df.loc[target_index, 'market_state'] = 'OPENING_AUCTION'

这种方法适合需要单独处理索引的场景,确保仅修改指定的那一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:35:20