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
相关产品推荐
相关产品推荐

