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

如何统计DataFrame列表列中技能的出现次数及关联角色?

嘿,我懂你折腾数小时却没搞定的郁闷——这两个需求其实用 pandas 就能轻松实现,我给你一步步拆解,附带可直接运行的代码:

需求1:统计前10高频技能并生成计数DataFrame

首先我们需要把Skills列里的列表"展开",让每个技能单独占一行,之后就能用value_counts()统计频率了:

import pandas as pd

# 先假设你的DataFrame名为df,这里给个示例数据方便你测试
data = {
    'Role': ['Backend Dev', 'Data Scientist', 'Frontend Dev', 'Backend Dev'],
    'Skills': [['Python', 'Django', '4G'], ['Python', 'SQL', 'ML'], ['JavaScript', 'React', '4G'], ['Python', 'Flask', '4G']]
}
df = pd.DataFrame(data)

# 处理空值(如果你的数据里有空列表或NaN,先去掉)
df = df.dropna(subset=['Skills'])

# 展开Skills列的列表
skills_exploded = df.explode('Skills')

# 统计前10高频技能,转成DataFrame并重命名列
top_10_skills = skills_exploded['Skills'].value_counts().head(10).reset_index()
top_10_skills.columns = ['Skill', 'Count']

print("前10高频技能:")
print(top_10_skills)

运行后你会得到一个两列的DataFrame,第一列是技能,第二列是对应的出现次数,完全符合你的需求。

需求2:生成技能-计数-对应角色列表的三列表格

这个需求需要我们按技能分组,同时统计计数和去重后的角色列表,用groupby()配合agg()就能实现:

# 基于刚才展开的skills_exploded数据分组聚合
skill_role_summary = skills_exploded.groupby('Skills').agg(
    Count=('Skills', 'count'),  # 统计技能出现次数
    Roles=('Role', lambda x: list(x.unique()))  # 收集去重后的角色列表
).reset_index()

# 重命名列让它更清晰
skill_role_summary.columns = ['Skill', 'Count', 'Associated Roles']

print("\n技能-计数-角色列表:")
print(skill_role_summary)

这段代码会生成一个三列的DataFrame:

  • 第一列是所有技能
  • 第二列是该技能的总出现次数
  • 第三列是具备该技能的所有不同角色的列表(已经去重,不会重复显示同一个角色)

如果你的数据量比较大,这段代码也能高效运行——pandas的分组聚合在处理这类场景时很靠谱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:32:53