如何在Pandas DataFrame中批量匹配不同列对应值的目标行?
解决方法
问题分析
需要匹配DataFrame的每一列与vals列表对应位置的元素,找出整行完全匹配的记录,且因列数较多,需避免手动编写每列的匹配条件。
错误原因
之前的多列拼接写法报错,是因为位运算符&的优先级高于==,导致条件运算顺序错误。即使给每个条件加括号实现手动拼接,列数多时也会非常繁琐。
简便实现方法
利用Pandas的eq()方法结合all(),无需手动指定列名即可实现批量匹配:
示例代码
import pandas as pd # 初始化示例DataFrame df = pd.DataFrame({'col1':[0.1,0.2,0.3,0.4], 'col2':[0.2,0.3,0.4,0.5], 'col3':[0.3,0.4,0.1,0.2]}) vals = [0.1,0.2,0.3] # 生成每行是否完全匹配的布尔掩码 mask = df.eq(vals, axis=1).all(axis=1) # 提取匹配的行 result = df.loc[mask] print(result)
输出结果
col1 col2 col3 0 0.1 0.2 0.3
代码解释
df.eq(vals, axis=1):让DataFrame的每一列与vals对应位置的元素逐行比较,生成一个由布尔值组成的DataFrame.all(axis=1):检查每一行的所有布尔值是否均为True,即整行所有列都匹配vals的对应元素df.loc[mask]:根据布尔掩码提取符合条件的行
浮点数精度处理
如果DataFrame中的值是浮点数,可能因精度误差导致匹配失败,可改用numpy.isclose()进行近似匹配:
import numpy as np mask = np.isclose(df, vals, axis=1).all(axis=1) result = df.loc[mask]
内容的提问来源于stack exchange,提问作者David Siret Marquês
相关产品推荐
相关产品推荐

