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

Pandas groupby统计各分类出现次数并拆分为独立列的实现方法

Pandas 实现方案

首先导入依赖并构造示例数据:

import pandas as pd

# 构造示例DataFrame,和你给出的输入格式一致
df = pd.DataFrame({
    'ID': [11, 11, 11, 22, 22],
    'cat_1': ["'OG'", "'LOL'", "'OG'", "'LOL'", "'OG'"],
    'cat_2': ["'ASD'", "'ASD'", "'DFG'", "'DFG'", "'DFG'"]
})

核心实现逻辑

核心思路是先将两个分类列融合为单列,再按ID和分类值统计频次,最后转为宽表格式:

# 步骤1:将cat_1、cat_2转为长表,仅保留ID和分类值两列
melted = df.melt(id_vars='ID', value_vars=['cat_1', 'cat_2'], value_name='cate')
# 步骤2:按ID和分类值分组计数,转为宽表后缺失值自动填充0
res = melted.groupby(['ID', 'cate']).size().unstack(fill_value=0).reset_index()
# 步骤3:可选操作,去除分类值首尾的引号,和你预期的列名格式匹配
res.columns = res.columns.str.strip("'")

你也可以用pd.crosstab简化写法,实现效果完全一致:

res = pd.crosstab(df['ID'], df.melt(id_vars='ID')['value']).reset_index()
res.columns = res.columns.str.strip("'")

最终输出的res即为你要求的结果:

ID  OG  LOL  ASD  DFG
0  11   2    1    2    1
1  22   1    1    0    2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:51:02