如何在Pandas中将值统计结果转换为独立列
问题:将分组统计结果转换为指定宽表结构
原始DataFrame结构:
date output 2023-01-25 A 2023-01-25 B 2023-01-25 B 2023-01-25 C 2023-01-25 C 2023-01-25 A 2023-01-25 B ... 2023-01-26 B 2023-01-26 C 2023-01-26 B 2023-01-26 B 2023-01-26 A 2023-01-26 C 2023-01-26 B ... 2023-01-27 C 2023-01-27 A 2023-01-27 A 2023-01-27 C 2023-01-27 B 2023-01-27 B
使用df.groupby('date').output.value_counts()后得到的分层索引结果:
date output 2023-01-25 A 52 B 28 C 42 2023-01-26 A 47 B 32 C 36 2023-01-27 A 23 B 67 C 35
需要转换为如下结构的宽表:
date A B C 2023-01-25 52 28 42 2023-01-26 47 32 36 2023-01-27 23 67 35
解决方案
有两种简洁的方法可以实现转换:
方法1:基于已有分组结果展开
在value_counts()后调用unstack(),直接将分层索引中的output维度展开为列名:
result = df.groupby('date').output.value_counts().unstack()
如果存在某日期缺少A/B/C类别的情况,结果会出现NaN,可以用fill_value参数直接填充为0:
result = df.groupby('date').output.value_counts().unstack(fill_value=0)
方法2:一步完成统计与转换
使用pivot_table直接完成分组统计和格式转换,无需先执行groupby:
result = df.pivot_table(index='date', columns='output', aggfunc='size', fill_value=0)
其中aggfunc='size'用于统计每个(date, output)组合的行数,fill_value=0同样用来处理缺失类别的场景。
两种方法最终都会生成你需要的目标宽表结构。
内容的提问来源于stack exchange,提问作者Siddhesh Gunjal
相关产品推荐
相关产品推荐

