如何按多列筛选Pandas DataFrame并获取指定列的有效值?
解决方法
你的问题出在筛选条件的构造方式上:直接用df[[*fcols]] == t生成的布尔矩阵去索引原DataFrame时,只有指定的a、b列有对应的布尔判断,n列没有匹配的筛选规则,所以会被置为NaN。正确的做法是先生成行级的布尔筛选器,再用它提取目标列。
正确代码示例
import pandas as pd t, f = True, False data = [ [t, f, f, '1'], [f, f, f, '2'], [f, t, f, '3'], [f, f, t, '4'] ] df = pd.DataFrame(data, columns=list("abcn")) fcols = ("a", "b") # 生成每行的筛选条件:a或b列任意为True mask = df[fcols].any(axis=1) # 提取符合条件的n列值 target_values = df.loc[mask, 'n'] print(target_values)
输出结果
0 1 2 3 Name: n, dtype: object
简化写法
如果想更简洁,可以合并成一行:
target_values = df.loc[df[fcols].any(axis=1), 'n']
若需要列表形式
直接调用tolist()即可:
target_list = target_values.tolist() # 输出:['1', '3']
内容的提问来源于stack exchange,提问作者user8060120
相关产品推荐
相关产品推荐

