Python实现数据小计与总计:请求协助修正输出格式
解决数据集生成小计与总计的问题
我来帮你搞定这个需求!你当前用groupby得到的是分层索引的长格式统计结果,而想要的是类似Excel透视表的宽格式,还包含每日小计和整体总计。咱们一步步来调整代码:
步骤1:生成宽格式透视表
首先用pivot_table直接把数据转换成你需要的列布局,自动按日期和分类统计数量,缺失的分类填充0:
import pandas as pd # 先确保日期列是datetime类型(如果原数据是字符串格式的话) data['Column4'] = pd.to_datetime(data['Column4']) # 统一分类名称的格式(比如把样本里的Non-Actionable改成Non-actionable,匹配你的预期输出) data['Column5'] = data['Column5'].replace('Non-Actionable', 'Non-actionable') # 生成透视表 pivot_df = data.pivot_table( index='Column4', columns='Column5', values='Column1', aggfunc='count', fill_value=0 )
步骤2:添加每日小计(Grand Total列)
给每行(每天)添加总计,也就是当天所有分类的数量之和:
pivot_df['Grand Total'] = pivot_df.sum(axis=1)
步骤3:添加整体总计(Grand Total行)
给每列添加总计,也就是每个分类的总数量,以及整体的总计数:
pivot_df.loc['Grand Total'] = pivot_df.sum(axis=0)
步骤4:调整日期格式(可选)
如果需要把日期转换成5/19/2018的格式,可以格式化索引:
# 先处理日期行的格式,再保留总计行的名称 date_index = pivot_df.index[:-1].strftime('%m/%d/%Y') pivot_df.index = list(date_index) + ['Grand Total']
最终输出效果
运行完上面的代码后,你会得到和预期一致的结果:
Row Labels Actionable Duplicate Informative Non-actionable Grand Total 5/19/2018 219 220 3 0 442 5/20/2018 5 270 859 2 1136 5/21/2018 8 295 17 0 320 5/22/2018 10 424 36 0 470 5/23/2018 8 157 3 0 168 5/24/2018 5 78 3 0 86 5/25/2018 3 80 0 0 83 Grand Total 39 1523 921 2 2485
关键说明
pivot_table是实现这种宽格式统计最直接的工具,比groupby后再unstack更简洁fill_value=0确保没有数据的分类显示0,而不是空值- 统一分类名称的格式是为了匹配你预期输出的列名,避免因为大小写/符号差异导致列不对应
内容的提问来源于stack exchange,提问作者Dinesh Gedda
相关产品推荐
相关产品推荐

