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

