如何用列表推导式根据DataFrame另一列对应值过滤列?
问题分析与解决
你的代码逻辑存在两个核心问题,导致输出空列表:
1. 行关联错误
你循环遍历的是df["A"]的每个元素,但判断条件word in df["B"]是在检查整个B列Series是否包含word,而不是当前A元素对应行的B列值。这种情况下,除非word恰好是B列中某一个完整的元素值(而且逻辑上和当前A元素无关),否则条件永远不成立。
2. 变量未明确定义
代码中直接使用了word变量,但你没有指定具体要匹配的目标子串(比如你期望输出[1],应该是要匹配B列第一个元素里的"a_b_c")。
正确写法
方式一:列表推导式(配对遍历A和B列)
通过zip同时遍历A和B的对应元素,确保判断条件和当前行绑定:
import pandas as pd df = pd.DataFrame({ "A" : [1,2,3], "B" : ["a_b_c_some_word", "de_f_some_word", "g_hi_some_word"] }) # 指定你要匹配的目标子串 target_word = "a_b_c" lst = [a for a, b in zip(df["A"], df["B"]) if target_word in b] print(lst) # 输出: [1]
方式二:更贴合Pandas风格的写法
利用Pandas的字符串方法直接过滤行,再提取A列转成列表:
lst = df[df["B"].str.contains("a_b_c")]["A"].tolist() print(lst) # 输出: [1]
内容的提问来源于stack exchange,提问作者hero_sp
相关产品推荐
相关产品推荐

