首页 > 解决方案 > Pandas groupby - 每组单独计算唯一的列

问题描述

我正在尝试做一个 groupby 在一列中我有字符串分类数据:

ID   cat_1   cat_2
11   'OG'    'ASD'
11   'LOL'   'ASD' 
11   'OG'    'DFG' 
22   'LOL'   'DFG'
22   'OG'    'DFG'

我正在尝试按 ID 进行分组,并将字符串数据聚合成一个数字特征,即每个类别的出现次数。所以结果将是:

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

我怎样才能在熊猫中实现这一点?谢谢!

标签: pythonpandaspandas-groupby

解决方案


您可以堆叠/value_counts/unstack:

(df.set_index('ID')
   .stack()
   .groupby('ID')
   .value_counts()
   .unstack(fill_value=0)
)

注意。.reset_index()如果您想要所有列,您可以添加

输出:

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

推荐阅读