Python统计DataFrame列值中集合元素的出现次数问题
解决方法
你的代码失败有两个核心原因:
- 直接遍历字符串
x会逐个访问字符,而非按逗号分割后的目标子串 - 变量名用了Python内置类型名
list,虽语法允许但易混淆,建议替换为更清晰的命名
步骤1:修正目标集合命名
target_set = {'AGB', 'YTE', 'ENN', 'TAP', 'XAL', 'MUI'}
步骤2:计算ColE(总出现次数)
将ColA的字符串按逗号分割为列表,统计列表中属于目标集合的元素总数:
df['ColE'] = df['ColA'].apply(lambda x: sum(1 for item in x.split(',') if item in target_set))
步骤3:计算ColD(唯一次数)
分割后转成集合自动去重,再计算与目标集合的交集大小:
df['ColD'] = df['ColA'].apply(lambda x: len(set(x.split(',')).intersection(target_set)))
完整代码示例
import pandas as pd # 初始化数据 data = { 'ColA': ['ENN,JAX,ATL,ERT,CMH,RSW,TAP,ABQ,ENN', 'TUY,XAL,MUI,AUS,OPP,YTE,ERT'], 'ColB': [45, 32], 'ColC': ['Three', 'Three'] } df = pd.DataFrame(data) # 目标集合 target_set = {'AGB', 'YTE', 'ENN', 'TAP', 'XAL', 'MUI'} # 计算目标列 df['ColD'] = df['ColA'].apply(lambda x: len(set(x.split(',')).intersection(target_set))) df['ColE'] = df['ColA'].apply(lambda x: sum(1 for item in x.split(',') if item in target_set)) # 输出预期结果 print(df[['ColA', 'ColD', 'ColE']])
运行结果
| ColA | ColD | ColE |
|---|---|---|
| ENN,JAX,ATL,ERT,CMH,RSW,TAP,ABQ,ENN | 2 | 3 |
| TUY,XAL,MUI,AUS,OPP,YTE,ERT | 3 | 3 |
内容的提问来源于stack exchange,提问作者Connie Xu
相关产品推荐
相关产品推荐

