python去重计数_用Python做透视表之value_sum和value_countdistinct功能
在pandas库中实现Excel的数据透视表效果通常用的是df['a'].value_counts()这个函数,表示统计数据框(DataFrame) df的列a各个元素的出现次数;例如对于一个数据表如pd.DataFrame({'a':['A','A','B','C','C','C'],'b':[1,2,3,4,5,6],'c':[11,11,12,13,13,14]}),Excel数据透视表与Python实现对比效果如下:Excel数据透视表与Python实现对比
就是对表df中的a列各个值出现的次数进行统计。
Pandas中的数据透视表各功能
用过Excel透视表功能的话我们知道,出了统计出现次数之外,还可以选择计算某行的求和、最大最小值、平均值等(数据透视表对于数值类型的列默认选求和,文本类型默认选计数),还是拿表df来说,excel的数据透视表可以计算a列的A、B、C三个元素对应的c列的求和(sum),但是pandas库并没有value_sum()这样的函数,pandas的sum函数是对整列求和的,例如df['b'].sum()是对b列求和,结果是21,和a列无关;所以我们可以自己按照根据a列分表再求和的思路去实现。自己造轮子的做法可以是:
def df_value_sum(df,by='a',s='b'):#by和s分别对应根据a列对b列的数求和
keys=set(df[by])
ss={}
for k in keys:
d=df.loc[df[by]==k]
ss[k]=d[s].sum()
return ss #返回一个字典
对于上面的表df,该函数df_value_sum(df,by='a',s='b')的输出是一个字典,{'B': 3, 'C': 15, 'A': 3},字典可以进一步转为DataFrame。同样的方法可以写出df_value_max(df)、df_value_min(df)、 df_value_min(df) df_value_avg(df)等;如果需要对除a外的所有列进行分组求和操作,可以用df.groupby('a').sum(),会输出一个DataFrame。
去重的数据透视表计数
另外还有一个很重要的需求是统计某列不重复元素的计数,这个用数据透视表是不能直接算出来的,例如有一个用户订单表,一个用户可能下了多个订单,用户有渠道属性,需要统计一段时间内各渠道的付费用户数,直接在透视表的行选渠道,值选uid计数,得到的是没去重的结果,拿df表来说,假设c列是用户id,a列是渠道,想统计a列的A、B、C各渠道各有多少付费用户数,透视表的结果和期望的结果如下图:常规透视表与期望的去重效果对比
可以看到直接对c列计数是不去重的。pandas库的.value_counts()库也是不去重的统计,查阅value_counts的官方文档可以发现,这个函数通过改变参数可以实现基础的分组计数、频率统计和分箱计数,normalize参数设置为True则将计数变成频率,例如df的a列中共有6行,而C出现了3次,于是C对应的值就是0.5;bin参数可以设置分箱;dropna可以设置是否考虑缺失值,默认是不考虑(可以结合normalize影响频率);sort可以设置是否根据统计值进行排序(关于value_counts函数的更多内容可以再看下官方文档)。复用之前df_value_sum(df)的思路和代码,可以这么实现去重的计数需求:
def df_value_countdistinct(df,by='a',s='c'):
keys=set(df[by])
ss={}
for k in keys:
d=df.loc[df[by]==k] w
ss[k]=len(set(d[s]))
return ss
调用这个函数df_value_countdistinct(df,by='a',s='c')得到的结果就是A对应1,B对于1,C对应2,通过set对c列去重后再计数。查资料的过程中发现StackOverflow网站提供的一种解法很优雅,思路就是把根据a列分表的过程直接用df.groupby('a')实现,于是直接写df.groupby('a').c.nunique()或df.groupby('a').['c'].nunique()就是期望的结果,效率比用for循环更高,值得学习。Python的去重计数实现
python去重计数_用Python做透视表之value_sum和value_countdistinct功能相关推荐
- python去重计数_用Python实现透视表的value_sum和countdistinct功能
在pandas库中实现Excel的数据透视表效果通常用的是df['a'].value_counts()这个函数,表示统计数据框(DataFrame) df的列a各个元素的出现次数:例如对于一个数据表如 ...
- python去重计数_如何python快速实现数组的去重计数
问题描述 对一个list=['a', 'a', 'b', 'c', 'a'],计算出截止每个位置为止去重后的元素个数.即:位置=0时, list[0:1] = ['a'],元素去重后个数为1 位置=1 ...
- python去重算法_使用Python检测文章抄袭及去重算法原理解析
在互联网出现之前,"抄"很不方便,一是"源"少,而是发布渠道少:而在互联网出现之后,"抄"变得很简单,铺天盖地的"源"源 ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- NO.111 禅道导出数据做透视表,让你轻松做年终工作总结。
为什么80%的码农都做不了架构师?>>> 年底了,很多公司都要求大家写年终工作总结.估计很多童鞋就开始犯愁了.年年写,来来去去总是那些模式,自己都觉得没意思. 今天,教大家一招 ...
- 用python做透视表_用Python实现数据的透视表的方法
用Python实现数据的透视表的方法 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 用Python实现数据的透视表的方法.txt ] (友情提示:右键点上行tx ...
- python画气泡图_用Python把图做的好看点:用Matplotlib画个好看的气泡图
我们继续来把简单的图形丢到极坐标,这次是气泡图和柱状图,临摹的对象是澎湃美数课 这个图看起来很好看,原理其实很简单,把柱状图和气泡图从笛卡尔坐标系中转移到极坐标系中来就OK 我们开始本次的临摹吧 本期 ...
- python 免费空间_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
最新文章
- Linux平台 Oracle 18c RAC安装Part2:GI配置
- golang select关键字用法
- 2.11 计算机视觉现状-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- CentOS 7 安装nexus
- Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
- GIT项目管理工具(part2)--初始配置
- 【算法学习】最优二叉查找树(动态规划)
- js 页面载入时的执行顺序
- 51单片机的LED的位定义(通俗易懂)
- Python中的zip函数
- @扎克伯格:一句对不起,能挽回我们泄漏的数据吗?
- Linux中级之netfilter/iptables应用及补充
- 【用三大件写出的开门烟花特效】
- 浮点数和整数的区别python_浮的部首|浮的拼音|浮的组词|浮的意思 - 查字典
- Pycharm中光标变粗 光标进入改写状态
- 数据同步利器之Tapdata Cloud
- 联想拯救者y7000键盘有几个按键失灵_y7000p键盘失灵
- 【从零开始学GIS再到精通GIS】ArcGIS中的绘图基操作(一)
- Parametric model
- svn的恢复到指定版本操作
热门文章
- 《中文文本信息抽取模型与方法研究》5:基于论元结构的事件要素及其角色识别
- 笔记本电脑+第二块显示屏如何双屏操作
- u3d引擎移动都有哪些方法?又都适用于什么场景?
- 基于ARMv8的固件系统架构
- 【Netty4】netty ByteBuf (二) 引用计数对象(reference counted objects)
- windows批处理脚本bat命令解析【6】常用命令整理
- python基因差异分析_Biopython基因组分析
- 介绍一个软件开发工具,堪称快速开发神器
- 非线性方程(组):高维方程解法
- 各种范文都有,到时不用找了。(值得收藏)