You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于含列表的已有特征创建新特征:按指定元素数量赋值方法咨询

解决方案:无需if else,用集合操作或矢量化统计更简便

首先你原来的代码逻辑有问题:isin()是判断整个列表元素是否在给定的列表里,比如df['host_verifications'].isin(['email'])是检查某一行的host_verifications是否等于['email'],而不是判断这个列表里包含email,根本没法统计符合条件的元素数量。

不用写一堆条件枚举,也不需要if else,直接统计列表中属于目标集合的元素个数就行,两种高效实现方式:

方法1:集合交集统计(简洁直观)

定义目标集合后,用apply计算每行列表和目标集合的交集长度:

target_verifications = {'email', 'phone', 'work_email'}
df['verification_count'] = df['host_verifications'].apply(
    lambda x: len(set(x) & target_verifications)
)
  • 原理:把每行的host_verifications转成集合,和目标集合求交集,交集的长度就是符合条件的元素数量,正好对应你要的1/2/3。

方法2:逐元素判断求和(大数据量更高效)

如果数据集很大,apply可能稍慢,可以用逐元素判断后求和的方式:

target_verifications = {'email', 'phone', 'work_email'}
df['verification_count'] = df['host_verifications'].apply(
    lambda x: sum(1 for item in x if item in target_verifications)
)
  • 原理:遍历每行列表里的元素,统计属于目标集合的个数,结果同样是1/2/3。

这两种方法都能自动覆盖所有可能的组合,不用手动枚举所有列表情况,比你原来的写法简洁太多,完全不需要if else语句。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:50:26