Pandas 实现分组计数且不计重复
在对dataframe进行分析的时候会遇到需要分组计数,计数的column中属性有重复,但又需要仅对不重复的项计数(即重复N次出现的项只计1次)。
函数如下:
dataframe.groupby([‘分组的列名']).需要计数的列名.nunique()
举例:
数组“data”如下:
StoreID | Sales | SalesDate | Channel |
---|---|---|---|
A | 100 | 2018/1/1 | 01 |
A | 90 | 2018/1/1 | 02 |
A | 110 | 2018/1/2 | 01 |
B | 82.2 | 2018/1/1 | 01 |
B | 90 | 2018/1/2 | 02 |
如果要按StoreID来统计每一家店的营业日期数(可以通过不计重复的count “SalesDate”来完成)
代码如下:
data.groupby(['StoreID']).SalesDate.nunique()
补充:pandas 统计分组内不重复计数
在数据分析中的数据处理过程中,经常需要对数据进行分组计数,看下下面这组数据
数据中name 为C 的有三行,其中有2个code是重复的
目标:
按name 分组,统计每组中code的不重复数量
df.groupby('name')['code'].nunique() # 以name 分组后,统计code的不重复数目
结果如下:
排序
df.groupby('name')['code'].nunique().sort_values(ascending=False) # 以name 分组后,统计code的不重复数目
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
利用pandas按日期做分组运算的操作
原始数据 TS PERIOD REQUEST STEPPED VALUE STATUS SECONDS 20-DEC-16 00:00:00.0 600 1 0 2.018 0 1482163200 20-DEC-16 00:01:00.0 600 1 0 2.019 0 1482163260 20-DEC-16 00:02:00.0 600 1 0 2.019 0 1482163320 20-DEC-16 00:03:00.0 600 1 0 2.019 0 1482163380 20-DEC
-
pandas group分组与agg聚合的实例
如下: import pandas as pd df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'], 'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000], 'Age':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]}) 构造的数
-
pandas 实现分组后取第N行
目的: 把question_id 对应的user_answer转成ABCD solution dfa=df.groupby('question_id').nth(0).reset_index() dfa['flag']='A' dfb=df.groupby('question_id').nth(1).reset_index() dfb['flag']='B' dfc=df.groupby('question_id').nth(2).reset_index() dfc['flag']='C' df
-
pandas groupby分组对象的组内排序解决方案
问题: 根据数据某列进行分组,选择其中另一列大小top-K的的所在行数据 解析: 求解思路很清晰,即先用groupby对数据进行分组,然后再根据分组后的某一列进行排序,选择排序结果后的top-K结果 案例: 取一下dataframe中B列各对象中C值最高所在的行 df = pd.DataFrame({"A": [2, 3, 5, 4], "B": ['a', 'b', 'b', 'a'], "C": [200801, 200902, 200704
-
pandas分组排序 如何获取第二大的数据
Python用来做数据分析很方便,网上很多关于找数据中第二大的方法,但是大多数都是关于SQL的,于是我挑战一下用Python来做这件事(主要是SQL写的不好>_<),上代码. 1.数据我是自己编的 在实际工作中应该从数据库中导入数据,如何从数据库导出数据,我之后会补充. import pandas as pd df = pd.DataFrame([ {"class": 1, "name": "aa", "english&qu
-
pandas 实现某一列分组,其他列合并成list
pandas列转换为字典,但将相同第一列(键)的所有值合并为一个键 形式一: import pandas as pd # data data = pd.DataFrame({'column1':['key1','key1','key2','key2'], 'column2':['value1','value2','value3','value3']}) print(data) # Grouped dict data_dict = data.groupby('column1').column2.a
-
Pandas 实现分组计数且不计重复
在对dataframe进行分析的时候会遇到需要分组计数,计数的column中属性有重复,但又需要仅对不重复的项计数(即重复N次出现的项只计1次). 函数如下: dataframe.groupby(['分组的列名']).需要计数的列名.nunique() 举例: 数组"data"如下: StoreID Sales SalesDate Channel A 100 2018/1/1 01 A 90 2018/1/1 02 A 110 2018/1/2 01 B 82.2 2018/1/1 0
-
pandas数据分组和聚合操作方法
<Python for Data Analysis> GroupBy 分组运算:split-apply-combine(拆分-应用-合并) DataFrame可以在其行(axis=0)或列(axis=1)上进行分组.然后,将一个函数应用到各个分组并产生新值.最后,所有这些函数的执行结果会被合并到最终的结果对象中去. GroupBy的size方法可以返回一个含有分组大小的Series. 对分组进行迭代 for (k1,k2), group in df.groupby(['key1','key2'
-
pandas数据分组groupby()和统计函数agg()的使用
数据分组 使用 groupby() 方法进行分组 group.size()查看分组后每组的数量 group.groups 查看分组情况 group.get_group('名字') 根据分组后的名字选择分组数据 准备数据 # 一个Series其实就是一条数据,Series方法的第一个参数是data,第二个参数是index(索引),如果没有传值会使用默认值(0-N) # index参数是我们自定义的索引值,注意:参数值的个数一定要相同. # 在创建Series时数据并不一定要是列表,也可以将一个字典
-
使用RedisAtomicInteger计数出现少计问题及解决
目录 RedisAtomicInteger计数出现少计 分析 原因 解决方法 使用RedisAtomicInteger中间遇到的问题 参考redis命令说明我们知道incr对操作值的要求 RedisAtomicInteger计数出现少计 最近工作中遇到了这样一个场景 同一个外部单号生成了多张出库单,等待所有相关的出库单都出库成功后回复成功消息外部系统调用方.因为是分布式布系统,我使用了RedisAtomicInteger计数器来判断出库单是否全部完成,数量达成时回复成功消息给外部系统调用方. 在
-
pandas groupby 分组取每组的前几行记录方法
直接上例子. import pandas as pd df = pd.DataFrame({'class':['a','a','b','b','a','a','b','c','c'],'score':[3,5,6,7,8,9,10,11,14]}) df: class score 0 a 3 1 a 5 2 b 6 3 b 7 4 a 8 5 a 9 6 b 10 7 c 11 8 c 14 df.sort_values(['class','score'],ascending=[1,0],inp
-
pandas多级分组实现排序的方法
pandas有groupby分组函数和sort_values排序函数,但是如何对dataframe分组之后排序呢? In [70]: df = pd.DataFrame(((random.randint(2012, 2016), random.choice(['tech', 'art', 'office']), '%dk-%dk'%(random.randint(2,10), random.randint(10, 20)), '') for _ in xrange(10000)), column
-
两种方法实现mysql分组计数,范围汇总
第一种:常规操作 SELECT SUM(ddd) AS count_days, CASE WHEN aa.days >= 1 AND aa.days < 3 THEN '1-3' WHEN aa.days >= 3 AND aa.days < 5 THEN '5-3' ELSE '5+' END AS groupby_days FROM ( SELECT SUM(1) AS ddd, days FROM tour_group GROUP BY days ) AS aa GROUP
-
pandas之分组groupby()的使用整理与总结
前言 在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决.在使用pandas进行数据分析时,groupby()函数将会是一个数据分析辅助的利器. groupby的作用可以参考 超好用的 pandas 之 groupby 中作者的插图进行直观的理解: 准备 读入的数据是一段学生信息的数据,下面将以这个数据为例进行整理grouby()函数的
-
Python代码实现列表分组计数
目录 1. count_by 2. 使用字典推导式 3. 使用collections.defaultdict简化代码 本篇阅读的代码片段来自于30-seconds-of-python. 1. count_by def count_by(arr, fn=lambda x: x): key = {} for el in map(fn, arr): key[el] = 1 if el not in key else key[el] + 1 return key # EXAMPLES from math
随机推荐
- iOS Label实现文字渐变色效果
- JavaScript下的时间格式处理函数Date.prototype.format
- jquery中表单 多选框的一种巧妙写法
- vue实现留言板todolist功能
- js 性能优化之快速响应的用户界面
- javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
- Asp.net中通过Button打开另一个的frm
- asp.net LC.exe已退出代码为 -1的原因分析及解决方法
- asp去除所有的超级链接的两种方法 替换与正则
- PHP实现接收二进制流转换成图片的方法
- 浅析JS操作DOM的一些常用方法
- 利用systemctl管理Tomcat启动、停止、重启及开机启动详解
- JDBC 使用说明(流程、架构、编程)
- javascript实现鼠标选取拖动或Ctrl选取拖动
- 解读安装SoundMAX秘密,让AC 97聆听天赖的方法
- 初识JAVA数组
- ASP.NET Core 2.0中Razor页面禁用防伪令牌验证
- Vue.js自定义事件的表单输入组件方法
- 看完工资立马翻3倍!(非程序员勿看)
- 详解ssh框架原理及流程