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

Pandas中如何计算前一行差值新增列并解决SettingWithCopyWarning报错?

报错原因

当你通过df.loc[过滤条件]获取子数据集时,Pandas默认返回的是原DataFrame的视图(与原数据共享内存的切片),而非独立的新对象。此时直接对该切片赋值新列,Pandas无法判断你是否希望修改原DataFrame,因此抛出SettingWithCopyWarning警告,该警告虽不阻断代码运行,但存在修改不生效、意外改动原数据集等风险。

单个县新增列解决方案

筛选子数据集时主动调用.copy()方法生成独立的DataFrame即可,修改后代码如下:

import pandas as pd
import requests 

df = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv")
# 新增.copy()生成独立子数据集
df1 = df.loc[(df['state'] == 'New Hampshire') & (df['county'] == 'Rockingham')].copy()
# 此时赋值不会触发警告
df1['new cases'] = df1['cases'].diff()
# 若需要将每个县首行的空差值替换为0,可补充下行代码
df1['new cases'] = df1['new cases'].fillna(0)
全量各县独立计算新增方案

无需拆分单个县的子数据集,直接通过groupby分组批量完成所有县的新增计算,执行效率更高:

# 按「州+县」组合唯一标识分组,每个分组内单独计算病例差值
df['new cases'] = df.groupby(['state', 'county'])['cases'].transform(lambda x: x.diff())
# 按需替换首行空值为0
df['new cases'] = df['new cases'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:05