最近小伙伴提出了几个问题,如何用pandas实现execl中的汇总行。
关于这个问题,群里展开了激烈的讨论,最终经过梳理总结出了以下两个解决方法。一种是当做透视时直接使用参数margins,另一种是当无透视时手动造出汇总行。
pivot_table问题(群成员浮生如梦):
我想统计一月到十二月的所有数据应该怎么写呢?
解决方法
用法:sum()、pivot_table如果要对数据按行方向求和,直接使用sum()函数即可,设置参数axis=1(默认是axis=0列方向对列数据求和),然后将横向求和结果赋给一个新的字段。此例中为求和,其他统计方式如mean、max、min等均同理。
# 生成测试数据df = pd.dataframe(np.random.randint(10,100,(9,12)), columns=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'])# 横向求和df['total'] = df.sum(axis=1)
此时已得到行方向的求和,如果我们想继续计算列方向求和并显示出来如何操作呢?可以借助pivot_table来实现,设置参数margins=true。
pd.pivot_table(df, index=df.index, aggfunc='sum', margins=true)
groupby+concat问题(群成员张晶):
pandas里面如何实现类似excel中的汇总行?
kv = {'name': {0: 'john', 1: 'mack', 2: 'lilei', 3: 'kevin', 4: 'alin', 5: 'bob'}, 'team': {0: 'a', 1: 'a', 2: 'b', 3: 'b', 4: 'c', 5: 'c'}, 'jan': {0: 9, 1: 9, 2: 8, 3: 10, 4: 7, 5: 9}, 'feb': {0: 10, 1: 7, 2: 8, 3: 7, 4: 6, 5: 8}, 'mar': {0: 8, 1: 9, 2: 7, 3: 8, 4: 8, 5: 7}, 'apri': {0: 8, 1: 7, 2: 6, 3: 7, 4: 6, 5: 8}}df = pd.dataframe(kv)
解决方法
用法:groupby、concat、sum、transform
该方法通过几种用法的组合间接实现了行和列数据汇总。
对列数据的汇总求和比较取巧,使用groupby实现了对整列数据求和,求和sum函数中需设置numeric_only参数,只对数值求和。得到列汇总结果后将其与原数据进行concat纵向拼接。对行数据求和可以直接使用sum函数,通过axis=1指定横向求和。# 增加列汇总数据total = df.groupby(lambda _: '总计').sum(numeric_only=true)# 与原数据纵向拼接df_total = pd.concat([df,total]).fillna('/')# 对原数据数值类型横向求和df_total['total'] = df_total.sum(numeric_only=true,axis=1)df_total
如果想要对team进行分组求和,可以通过transform实现组合求和并添加为一个新的求和列。
# 分组内求和df_total['team_total'] = df_total.groupby(['team'])['total'].transform('sum')df_total
以上是本次分享内容。
增材制造产业发展提速 3D打印推上制造业制高点
LED防爆灯的优点介绍
《2020年山东省制造业创新中心培育名单》出炉
液晶拼接屏日常维护小知识
未来机器人将实现“人机共融”,中国该如何应对,机遇还是挑战?
如何用pandas实现execl中的汇总行
Xilinx 宣布Vivado设计套件开始支持16nm UltraScale+产品早期试用
首项人工智能 CAD 草图绘制技术解析
科技是把双刃剑:令人担心的事情还是发生了
全球晶圆代工厂巨头台积电已经向美国寻求恢复对华为的供应
半导体存储芯片价格涨势确立,三星等厂商减产刺激市场
现金之王苹果超越英特尔和高通 iPhone8概念刺激股价持续反弹
Q3全球智能手机市场萎缩8% 跌至十年来最低水平
回顾2020:芯片问题频发,重点齐聚中国
三维机械设计软件对比:探索 SOLIDWORKS 的优良之处
预计到2025年全球传感器市场规模将达1285亿美元
五分钟了解上汽通用PHEV/HEV混动车
微软推送win10最新版Edge浏览器
KORO利用区块链的八大运用体系助力旅游业快速发展
Mini LED产品日趋成熟 技术发展却差强人意