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

Pandas链式赋值定位与SettingWithCopyWarning问题解决求助

问题分析与解决

首先,你怀疑的df_grouped = df1.groupby(['Item']).sum()并不是触发警告的原因,真正问题出在:
df_date_extract = df_grouped.loc[:,startwk:endwk]
这行代码返回的可能是df_grouped的视图而非独立副本,当你后续通过df_date_extract.loc[:,'Row_Total']新增列时,Pandas无法确定你要修改原数据还是副本,于是抛出警告。

解决方法

方法1:显式创建副本

在获取切片时添加.copy(),强制生成独立的DataFrame副本:

def get_max_item(startwk, endwk):
    df1 = pd.read_csv('data.csv')
    df_grouped = df1.groupby(['Item']).sum()
    # 显式创建副本,避免视图/副本混淆
    df_date_extract = df_grouped.loc[:,startwk:endwk].copy()
    df_date_extract.loc[:,'Row_Total'] = df_date_extract.sum(numeric_only=True, axis=1)
    df_max_item = df_date_extract[df_date_extract['Row_Total']==df_date_extract['Row_Total'].max()]
    return df_max_item.index[0]

方法2:使用assign方法新增列(更简洁安全)

assign方法会返回全新的DataFrame,彻底规避视图/副本的问题:

def get_max_item(startwk, endwk):
    df1 = pd.read_csv('data.csv')
    df_grouped = df1.groupby(['Item']).sum()
    df_date_extract = df_grouped.loc[:,startwk:endwk]
    # 用assign新增列,自动返回新DataFrame
    df_with_total = df_date_extract.assign(Row_Total=df_date_extract.sum(numeric_only=True, axis=1))
    df_max_item = df_with_total[df_with_total['Row_Total']==df_with_total['Row_Total'].max()]
    return df_max_item.index[0]

方法3:一步到位的优化写法

省去多余中间变量,让逻辑更紧凑:

def get_max_item(startwk, endwk):
    df1 = pd.read_csv('data.csv')
    return (df1.groupby(['Item'])
            .sum()
            .loc[:, startwk:endwk]
            .assign(Row_Total=lambda x: x.sum(numeric_only=True, axis=1))
            .nlargest(1, 'Row_Total')
            .index[0])

翻译后的报错信息

......:125: SettingWithCopyWarning:
正尝试在DataFrame切片的副本上设置值。
请尝试使用.loc[行索引器,列索引器] = 值 的方式替代

查看文档中的注意事项:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df_date_extract.loc[:,'Row_Total'] =
df_date_extract.sum(numeric_only=True, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:37:50