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的不重复数目

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 利用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

随机推荐