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

Pandas对比DataFrame两列列表 统计增删元素数生成独立新列

Pandas逐行对比两列列表元素的增删数量实现

需求

DataFrame包含word1、word2两列,每列的元素都是列表格式,需要逐行计算:

  • added列:word2里有、word1里没有的元素个数
  • deleted列:word1里有、word2里没有的元素个数

样例输入输出对应关系:

  • 行1:word1=[apple, orange],word2=[tomato, cucumber] → added=2,deleted=2
  • 行2:word1=[banana, kiwi],word2=[kiwi, mango] → added=1,deleted=1

最高效实现(无重复元素场景)

如果你的列表里没有重复元素,直接用集合差集做Series级运算,性能比逐行apply自定义函数高一个量级,十万行级数据秒出结果:

# 临时转集合用于差集计算
df["_w1"] = df["word1"].apply(set)
df["_w2"] = df["word2"].apply(set)

# 集合差集的长度就是对应增删的元素数量
df["added"] = (df["_w2"] - df["_w1"]).str.len()
df["deleted"] = (df["_w1"] - df["_w2"]).str.len()

# 删除临时列
df.drop(columns=["_w1", "_w2"], inplace=True)

重复元素场景适配

如果列表存在重复元素,且需要按实际出现次数统计差异(比如word1有2个apple,word2有1个apple,要记deleted=1),就用collections.Counter做计数差:

from collections import Counter

def calc_diff(row):
    count1 = Counter(row["word1"])
    count2 = Counter(row["word2"])
    added = sum((count2 - count1).values())
    deleted = sum((count1 - count2).values())
    return added, deleted

df[["added", "deleted"]] = df.apply(lambda x: calc_diff(x), axis=1, result_type="expand")

结果校验

两种写法跑出来的结果都完全匹配预期:

  1. 第一行两个列表没有共同元素,所以新增、删除数都是2
  2. 第二行共同元素是kiwi,word2多了mango(新增1),word1少了banana(删除1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:18:15