You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中如何基于年龄列表在IF条件中筛选DataFrame姓氏?

如何基于年龄列表正确筛选姓氏?

你的问题出在列表推导式的逻辑上——当前的写法会遍历list_age里的每一个元素,只要age != x就执行一次append操作。比如年龄为12的条目,会满足12 !=1312 !=1112 !=10三个条件,对应的姓氏会被添加3次;而年龄为13的条目,会满足13 !=1113 !=10两个条件,姓氏被添加2次,这就导致结果里出现大量重复项。

下面是几种正确的实现方式:

方法1:修改循环判断逻辑(最直观)

直接用age not in list_age替代逐个判断,只要年龄不在排除列表里,就添加一次姓氏:

list_age = [13,11,10]
list_n = []
for age, surname in zip(df.Age, df.Surname):
    if age not in list_age:
        list_n.append(surname)

执行后list_n的结果就是正确的:['Black', 'Ferrari', 'Red', 'Man']

方法2:用列表推导式直接生成结果(更简洁)

把判断逻辑整合到列表推导式中,一步生成目标列表:

list_age = [13,11,10]
list_n = [surname for age, surname in zip(df.Age, df.Surname) if age not in list_age]

这种写法和方法1逻辑一致,但代码更紧凑,是更Pythonic的写法。

方法3:利用Pandas内置方法(最高效)

既然你已经在使用DataFrame,推荐直接用Pandas的isin方法结合取反操作,避免手动循环,效率更高(尤其是数据量较大时):

list_age = [13,11,10]
list_n = df[~df['Age'].isin(list_age)]['Surname'].tolist()

这里df['Age'].isin(list_age)会返回一个布尔Series,表示每行年龄是否在排除列表中,~符号用来取反,筛选出不在列表中的行,最后提取Surname列并转为列表即可。

内容的提问来源于stack exchange,提问作者Lorenzo Negri

火山引擎 最新活动