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

pandas如何计算x=0轴两侧对应行y值的绝对差总和

实现方法

核心思路是匹配正负x对应的y值,再计算绝对差总和,以下是两种pandas原生实现方案,都可以避免for循环,运行效率更高:

方案1:分组计算(代码更简洁)

适合数据量不大的场景,代码简洁易读:

# 提前构造绝对值列,排除x=0的行后按绝对值分组,计算每组y的差值绝对值再求和
df['abs_x'] = df['x'].abs()
total_diff = df[df['x'] != 0].groupby('abs_x')['y'].apply(lambda g: abs(g.iloc[0] - g.iloc[1])).sum()

方案2:表合并计算(运行效率更高)

适合大数据量场景,用向量化merge操作替代分组的逐组apply,性能优势明显:

# 拆分正负x的数据集,新增公共匹配键abs_x
neg_df = df[df['x'] < 0].rename(columns={'y': 'y_neg'}).assign(abs_x=lambda x: x['x'].abs())
pos_df = df[df['x'] > 0].rename(columns={'y': 'y_pos'}).assign(abs_x=lambda x: x['x'].abs())

# 按abs_x匹配正负对应的行,计算绝对差总和
merged_df = pd.merge(neg_df, pos_df, on='abs_x')
total_diff = (merged_df['y_neg'] - merged_df['y_pos']).abs().sum()

注意事项

如果存在部分x只有正值或只有负值的情况,可将merge的how参数改为outer,根据需求对缺失的y值做补0或其他自定义处理即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:39:02