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
相关产品推荐
相关产品推荐

