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

如何用Python条件逻辑处理含重复值DataFrame列映射及报错排查

问题解答

一、SettingWithCopyError报错原因

这个错误的核心是:你当前操作的market_info_df1不是独立的原始DataFrame,而是从某个父DataFrame通过切片(比如布尔索引、列选择等)得到的副本或视图。Pandas无法判断你是想修改这个副本,还是想修改背后的原始DataFrame,所以抛出这个错误,避免你因误操作导致原始数据未被修改的问题。

解决办法

  • 显式复制:在创建market_info_df1时,调用.copy()方法生成独立DataFrame,示例:
    market_info_df1 = original_dataframe[your_slice_condition].copy()
    
  • 使用.loc赋值:通过.loc明确指定行和列进行赋值,确保操作目标明确:
    market_info_df1.loc[:, 'reason'] = s1.combine_first(s2)
    

二、三个条件逻辑的实现代码

针对你提出的三个映射规则,以下是可直接运行的实现代码:

import pandas as pd

def apply_reason_mapping(df):
    # 条件1:首个issue_status=100且trading_state为None的行,reason设为'F'
    mask_100_none = (df['issue_status'] == 100) & df['trading_state'].isna()
    first_match = mask_100_none.idxmax()
    if mask_100_none[first_match]:
        df.loc[first_match, 'reason'] = 'F'
    
    # 筛选所有issue_status=400且trading_state为None的行索引
    mask_400_none = (df['issue_status'] == 400) & df['trading_state'].isna()
    valid_indices = mask_400_none[mask_400_none].index.tolist()
    
    # 条件2:倒数第二个符合条件的行,reason设为'SL'
    if len(valid_indices) >= 2:
        df.loc[valid_indices[-2], 'reason'] = 'SL'
    
    # 条件3:最后一个符合条件的行,reason设为'L'
    if len(valid_indices) >= 1:
        df.loc[valid_indices[-1], 'reason'] = 'L'
    
    return df

# 测试第一个示例DataFrame
df1 = pd.DataFrame({
    'issue_status': [100, 100, 400, 100, 400, 100, 400, 100, 400],
    'trading_state': ['A0', None, None, None, None, 'B2', None, None, 'A6'],
    'reason': ['', '', '', '', '', '', '', '', '']
})
print("处理后第一个DataFrame:")
print(apply_reason_mapping(df1))

# 测试第二个示例DataFrame
df2 = pd.DataFrame({
    'issue_status': [400, 100, 400, 400, 100, 100],
    'trading_state': [None, 'A0', None, 'A0', None, None],
    'reason': ['', '', '', '', '', '']
})
print("\n处理后第二个DataFrame:")
print(apply_reason_mapping(df2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:25:21