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

Python Pandas中计算两列字符串列表的交集元素个数

解决DataFrame每行两列表列的交集元素计数问题

嘿,我来帮你搞定这个需求!你要计算DataFrame中每行A列和B列(都是字符串列表)的交集元素个数,之前的方法没生效,主要是没针对每行的两个列表做针对性处理,我给你两种靠谱的解法:

方法一:使用apply(直观易懂)

先定义一个处理单行的函数,然后通过apply按行遍历DataFrame,记得一定要加上axis=1参数(表示按行处理):

import pandas as pd

def count_row_intersection(row):
    # 将两个列表转为集合求交集,再返回交集的长度
    return len(set(row['A']) & set(row['B']))

# 假设你的DataFrame名为df,生成C列
df['C'] = df.apply(count_row_intersection, axis=1)

方法二:列表推导式(更高效)

如果你的数据量比较大,apply的效率可能不够高,用列表推导式结合zip会快很多:

df['C'] = [len(set(col_a) & set(col_b)) for col_a, col_b in zip(df['A'], df['B'])]

验证示例

举个实际例子测试一下:

data = {
    'A': [['car', 'passenger', 'truck'], ['cat', 'dog'], ['apple']],
    'B': [['car', 'house', 'flower', 'truck'], ['dog', 'bird'], ['banana', 'apple']]
}
df = pd.DataFrame(data)
# 用上面任意一种方法生成C列后,df的结果如下:
#                             A                            B  C
# 0  [car, passenger, truck]  [car, house, flower, truck]  2
# 1               [cat, dog]               [dog, bird]     1
# 2                  [apple]            [banana, apple]     1

为什么之前的方法无效?

  • np.unique(frame[['colA', 'colB']]):这个是对整个两列的所有元素做全局去重,根本不是针对每行的交集计算,完全不符合你的需求。
  • 之前的apply写法如果没加axis=1,默认是按列处理的,函数接收的是整列数据,而非每行的A、B两个列表,自然得不到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:05:04