计算 Pandas 中按多列分组后的列差值(diff)
利用groupby与diff方法,按多列分组后可快速计算组内列差值,例如df['Prop2Diff']=df.groupby(['Time','Prop1'])['Prop2'].diff()。需注意原始数据顺序,必要时先排序。diff支持periods参数调整跨行数,且可结合abs求绝对值。该方法高效简洁,适合大规模数据处理,是数据清洗的常用技巧。
做数据分析时,你一定遇到过这样的场景:需要根据多个条件(比如时间点和类别标签)来分组,然后在每组内部计算某个数值列的逐行变化量。举个例子,在时序实验或分组观测中,我们只关心同一时刻、同一属性下的样本序列,想看看某个指标(比如 Prop2)是怎么一步步变化的——是上升了还是下降了?这种“按组差分”的需求,正是 groupby(...).diff() 大显身手的地方。
核心方法极其简洁,一行代码就能搞定:
df['Prop2Diff'] = df.groupby(['Time', 'Prop1'])['Prop2'].diff()
这条语句做了什么?首先按 ['Time', 'Prop1'] 两列联合分组,确保每个组里的记录拥有完全一致的时间和属性标识;然后在每组内部,对 Prop2 列执行 .diff() 操作(即当前行值减去上一行值),自动保留原始行顺序。每组的第一行因为没有前一行可减,结果自然就是 NaN。
来看一个具体的例子:
import pandas as pd
df = pd.DataFrame({
"Time": [1,2,3,1,2,3],
"Prop1": ["A","B","A","A","B","B"],
"Prop2": [4, 5, 1, 5, 4, 3]
})
执行上述代码后,输出结果如下:
| Time | Prop1 | Prop2 | Prop2Diff |
|---|---|---|---|
| 1 | A | 4 | NaN |
| 2 | B | 5 | NaN |
| 3 | A | 1 | NaN |
| 1 | A | 5 | 1.0 |
| 2 | B | 4 | -1.0 |
| 3 | B | 3 | NaN |
这里有个关键点需要警惕:分组逻辑严格依赖于原始数据的物理顺序。如果数据没有按 Time 或 Prop1 排序,同组的记录可能被分散在不同位置,导致 .diff() 作用在非连续的行上,结果自然就不对了。所以,如果业务要求按时间顺序计算差值,最好先主动排个序:
df = df.sort_values(['Time', 'Prop1']).reset_index(drop=True) df['Prop2Diff'] = df.groupby(['Time', 'Prop1'])['Prop2'].diff()
另外,.diff() 还支持一个参数 periods(默认值为1),可以用来计算跨 n 行的差值。比如 diff(periods=2) 得到的是当前行与前两行的差。如果需要绝对差值,后面再链式调用 .abs() 即可。
总而言之,用 groupby([...])[col].diff() 替代嵌套循环,不仅代码更简洁、可读性更强,而且底层由 pandas 高度优化的向量化操作实现,性能提升可达数十倍。在处理百万级数据时,这绝对是一个值得养成的习惯。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













