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

