pandas如何筛选列中符号相反值,保留B中相反数存在于A的记录
pandas实现跨组相反数匹配筛选
实现逻辑
- 先提取编码为A的所有数值存入集合,利用集合O(1)查询效率提升筛选速度
- 仅保留编码为B的记录,判断规则为:当前记录数值的相反数,必须存在于A组的数值集合中
- 自动满足「绝对值相等、符号相反」的数值对匹配要求
可直接复用的代码
import pandas as pd # -------------------------- # 替换为你自己的数据读取逻辑 # 假设两列:编码列名code,存A/B值;数值列名value,存待匹配数字 df = pd.read_csv("你的数据文件路径.csv") # -------------------------- # 提取A组所有数值转集合,自动跳过空值 a_values = set(df.loc[df["code"] == "A", "value"].dropna()) # 筛选符合要求的B组记录 result = df[ (df["code"] == "B") & (df["value"].apply(lambda x: -x in a_values)) ].reset_index(drop=True)
逻辑验证
用测试样例验证效果:
# 测试数据 test_df = pd.DataFrame({ "code": ["A", "A", "A", "A", "B", "B", "B", "B"], "value": [10, -22, 35, 47, -10, 22, 15, -35] })
运行筛选逻辑后输出3条符合要求的B类记录:
- B类-10:相反数10存在于A组,匹配10/-10数对
- B类22:相反数-22存在于A组,匹配-22/22数对
- B类-35:相反数35存在于A组,匹配35/-35数对
- B类15:相反数-15不存在于A组,被过滤
如果你的表中编码列、数值列的列名和示例不一致,直接替换代码中对应的
code、value为实际列名即可。
内容的提问来源于stack exchange,提问作者Lidse
相关产品推荐
相关产品推荐

