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

Pandas:指定列值存在于另一列列表元素时删除对应行

最优实现方案(Pandas实现,适配结构化表格数据场景)

核心逻辑是先将friend列所有列表内的元素汇总为哈希集合,依托集合O(1)复杂度的成员判断能力做行筛选,整体时间复杂度为O(n),是大规模数据场景下性能最优的实现方式。
不要使用逐行遍历全表匹配的写法,这类写法时间复杂度为O(n²),数据量过万后性能会出现明显下降,预收集集合的方案性能可比逐行匹配高数十到数百倍。

实现步骤

  • 加载或构造原始结构化数据集
  • 平铺friend列的所有列表值,将所有元素存入集合,得到所有出现在好友列表中的用户全集
  • 筛选user列取值不在上述集合内的行,即为最终保留的结果

可直接运行的代码示例

import pandas as pd

# 构造原始示例数据
df = pd.DataFrame({
    'user': ['jack', 'mary', 'alice', 'andrew', 'catherine', 'john'],
    'friend': [
        ['mary', 'jane', 'alex'],
        ['kate', 'andrew', 'jensen'],
        ['marina', 'catherine', 'howard'],
        ['syp', 'yuslina', 'john'],
        ['yute', 'kelvin'],
        ['beyond', 'holand']
    ]
})

# 汇总所有好友列表的元素到集合
friend_set = set()
for f_list in df['friend']:
    friend_set.update(f_list)

# 筛选符合要求的行,reset_index可选,用来重置行序号
result = df[~df['user'].isin(friend_set)].reset_index(drop=True)
print(result)

运行输出

user                           friend
0   jack             [mary, jane, alex]
1  alice  [marina, catherine, howard]

注意:如果你的friend列存储的是字符串格式的列表(例如"[mary, jane, alex]"),需要先用ast.literal_eval将字符串转换为原生列表对象,再执行上述流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:57:29