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

使用groupby+transform('first')做fillna时出现SettingWithCopyWarning如何解决

问题原因

这个警告的本质是你当前操作的df是从另一个DataFrame中切片得到的视图/副本,pandas无法确认你修改这个df时是否需要同步修改原DataFrame,因此抛出告警。

解决方法

你可以任选以下任意一种方案处理:

方案1:创建df时明确指定为独立副本

如果你的df是之前通过过滤、切片其他DataFrame得到的(比如df = raw_df[raw_df['read_time'] >= '2019-01-01']这类写法),只需要在切片逻辑末尾加上.copy(),明确声明这是独立的副本即可:

# 原切片逻辑末尾加.copy()
df = raw_df[你的过滤条件].copy()

# 后续的填充代码不需要改动
df['lat'] = df.groupby('location_id')['lat'].transform('first')
df['lng'] = df.groupby('location_id')['lng'].transform('first')

方案2:赋值时使用.loc明确指定列

如果你不想修改之前的df创建逻辑,就按照告警提示使用.loc写法完成赋值,即可消除告警:

df.loc[:, 'lat'] = df.groupby('location_id')['lat'].transform('first')
df.loc[:, 'lng'] = df.groupby('location_id')['lng'].transform('first')

额外优化提示

你当前用的transform('first')是取分组内的第一个值,不会自动跳过空值,如果后续出现分组第一个值为nan的场景,可以调整为取分组第一个非空值,写法如下:

df.loc[:, 'lat'] = df.groupby('location_id')['lat'].transform(lambda x: x.dropna().iloc[0])
df.loc[:, 'lng'] = df.groupby('location_id')['lng'].transform(lambda x: x.dropna().iloc[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:18:03