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

pandas如何按时间戳分组计算行与指定类别值的最大差值

实现方法

这里给你两种常用的实现方案,都可以直接得到你需要的结果:

方案1:分组+自定义计算函数(逻辑直观易理解)

核心逻辑是对每个秒级分组,先提取类别A的数值作为基准,再计算组内所有数值和基准的绝对差,取最大值返回:

def calc_max_diff(group):
    # 取当前分组内类别A的基准值
    base_a = group.loc[group['Category'] == 'A', 'Value'].iloc[0]
    # 返回组内绝对差值的最大值
    return abs(group['Value'] - base_a).max()

# 按秒级时间戳分组计算,重命名结果列
result = df.groupby('TimeStamp', as_index=False).apply(calc_max_diff).rename(columns={0:'max. Difference'})

方案2:广播基准值+向量化计算(性能更高,适合大数据量场景)

通过transform将每组的A类基准值同步到组内所有行,再用向量化运算计算差值,避免逐组调用自定义函数的额外开销:

# 给每行匹配对应秒组的A类基准值
df['a_base'] = df.groupby('TimeStamp')['Value'].transform(
    lambda x: x[df.loc[x.index, 'Category'] == 'A'].iloc[0]
)
# 计算差值后分组取最大值
result = (
    df.assign(diff = abs(df['Value'] - df['a_base']))
    .groupby('TimeStamp', as_index=False)['diff'].max()
    .rename(columns={'diff':'max. Difference'})
)
# 可选:删除临时添加的基准值列
df.drop('a_base', axis=1, inplace=True)

两种方案得到的result都和你期望的输出完全一致。


内容的提问来源于stack exchange,提问作者V.Hunon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:02