能否使用Pandas的.loc方法基于列表实现数据筛选?
问题解答
不能直接用df.loc[df[['col1', 'col2']] == ['this', 'that']]这种写法实现你想要的筛选逻辑,原因是:
当对多列DataFrame和列表做相等比较时,Pandas会把列表广播成与DataFrame同形状的结构,逐元素比较后得到的是布尔型DataFrame,而.loc需要的是一维的逐行判断布尔序列。
如果想筛选出**col1等于'this'且col2等于'that'**的行,推荐两种正确写法:
方法1:用逻辑与(&)连接单列条件
df.loc[(df['col1'] == 'this') & (df['col2'] == 'that')]
注意给每个条件单独加括号,避免运算符优先级导致的逻辑错误。
方法2:逐行匹配目标值
先把目标值构造成与列名对应的Series,再逐行验证所有列是否匹配:
import pandas as pd target = pd.Series(['this', 'that'], index=['col1', 'col2']) df.loc[df[['col1', 'col2']].eq(target).all(axis=1)]
.eq(target)会按列匹配目标值,.all(axis=1)确保每行的所有列都满足条件,最终生成.loc可用的一维布尔序列。
内容的提问来源于stack exchange,提问作者GeorgeLPerkins
相关产品推荐
相关产品推荐

