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

如何按Time和Prop1分组计算Pandas中Prop2的列间差值

高效实现按Time和Prop1分组计算Prop2差值

你需要按Time和Prop1的组合分组,对每组内的Prop2计算后行减前行的差值,嵌套循环在大数据集下效率极差,用Pandas的groupby+diff可以完美解决,性能远超循环实现。

核心实现代码

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的差值
df['Prop2Diff'] = df.groupby(['Time', 'Prop1'])['Prop2'].diff()

格式化为期望的显示样式

如果需要把差值转换成你想要的(当前值-前值)=结果格式,可以用apply做字符串格式化:

# 处理差值的显示格式,NaN保持原样
df['Prop2Diff'] = df.apply(
    lambda row: f"({row['Prop2']}-{row['Prop2'] - row['Prop2Diff']})= {int(row['Prop2Diff']) if row['Prop2Diff'].is_integer() else row['Prop2Diff']}"
    if pd.notna(row['Prop2Diff']) else pd.NA,
    axis=1
)

最终结果

运行后得到的结果与你的期望完全匹配:

TimeProp1Prop2Prop2Diff
1A4
2B5
3A1
1A5(5-4)= 1
2B4(4-5)= -1
3B3

逻辑说明

  • groupby(['Time', 'Prop1'])会将所有Time和Prop1完全匹配的行归为一组,比如Time=1且Prop1=A的两行是一组,Time=2且Prop1=B的两行是一组,其余组仅含单行。
  • diff()方法对每组内的Prop2执行后行减前行的计算,单行组自动返回NaN,完全符合你的需求。
  • 这是Pandas原生的向量化操作,避免了循环带来的性能损耗,在大数据集下效率提升非常显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:20:26