python怎么分组,python分组统计数据

  python怎么分组,python分组统计数据

  本文主要详细介绍Python如何优雅地对数据进行分组,并通过实例进行详细说明。有兴趣的朋友可以跟边肖学习一下。

  假设我们有这样的数据:

  数据=[

  (苹果,30),(苹果,35),

  (苹果,32),(梨,60),

  (梨,32),(梨,60),

  (“香蕉”,102),(“香蕉”,104)

  ]

  #我们希望更改为以下格式

  [(苹果,[30,35,32]),

  (梨,[60,32,60]),

  (香蕉,[102,104])]

  如果是你,你会怎么做?一个简单的解决方案是构造一个字典:

  数据=[

  (苹果,30),(苹果,35),

  (苹果,32),(梨,60),

  (梨,32),(梨,60),

  (“香蕉”,102),(“香蕉”,104)

  ]

  data_dict={}

  对于名称,countindata:

  ifnamenotindata_dict:

  data_dict[name]=[]

  data _ dict[名称]。追加(计数)

  打印(数据字典)

  { 苹果 :[30,35,32],

  梨 :[60,32,60],

  香蕉 :[102,104]}

  打印(list(data_dict.items()))

  [(苹果,[30,35,32]),

  (梨,[60,32,60]),

  (香蕉,[102,104])]

  这个方案完全没有问题,但是我们可以写得更优雅一点,就是使用字典的setdefault方法:

  数据=[

  (苹果,30),(苹果,35),

  (苹果,32),(梨,60),

  (梨,32),(梨,60),

  (“香蕉”,102),(“香蕉”,104)

  ]

  data_dict={}

  对于名称,countindata:

  #setdefault(k,v)具有以下含义

  #当K不存在时,在字典中设置k:v,返回v。

  #当K存在时,直接返回K的对应值。

  data_dict.setdefault(name,[])。追加(计数)

  打印(list(data_dict.items()))

  [(苹果,[30,35,32]),

  (梨,[60,32,60]),

  (香蕉,[102,104])]

  Setdefault是一个非常方便的方法,但是不经常使用,或者说不太流行。主要是给每个调用一个初始值,比如代码中的空list []。另外,这里的初始值可以是任意的。如果想在添加时达到去重的效果,只需用空集替换空列表即可。

  或者我们也可以使用defaultdict,它位于collections模块中。

  fromcollectionsimportdefaultdict

  数据=[

  (苹果,30),(苹果,35),

  (苹果,32),(梨,60),

  (梨,32),(梨,60),

  (“香蕉”,102),(“香蕉”,104)

  ]

  #收到可调用的内部

  #当被访问的k不存在时,返回可调用调用后的值

  data_dict1=defaultdict(list)

  对于名称,countindata:

  data _ dict 1[名称]。追加(计数)

  打印(list(data_dict1.items()))

  [(苹果,[30,35,32]),

  (梨,[60,32,60]),

  (香蕉,[102,104])]

  #也可以指定为set。

  data_dict2=defaultdict(set)

  对于名称,countindata:

  data _ dict 2[名称]。添加(计数)

  打印(list(data_dict2.items()))

  [(苹果,{32,35,30}),

  (梨,{32,60}),

  (香蕉,{104,102})]

  一般来说,defaultdict与字典的setdefault方法非常相似,所以我们可以只使用setdefault。

  当然,关于分组还有一个特例,就是词频统计。假设我们要统计一个迭代对象中每个元素的出现次数,应该怎么做?

  data=[苹果,苹果,苹果,

  梨子,梨子,梨子,

  香蕉,香蕉]

  data_dict={}

  foritemindata:

  # setdefault不能在此处使用,因为它是一个函数

  #.setdefault(item,0)=1不符合语法规则。

  ifitemnotindata_dict:

  data_dict[item]=0

  data_dict[item]=1

  打印(数据字典)

  { 苹果 :3,梨 :3,香蕉 :2}

  #或使用defaultdict

  fromcollectionsimportdefaultdict

  data_dict=defaultdict(int)

  foritemindata:

  data_dict[item]=1

  打印(数据字典)

  defaultdict(类 int ,

  { 苹果 :3,梨 :3,香蕉 :2})

  然而,当涉及到词频统计时,我们也可以使用collections下的Counter类。

  fromcollectionsimportCounter

  data=[苹果,苹果,苹果,

  梨子,梨子,梨子,

  香蕉,香蕉]

  data _ dict=计数器(数据)

  #直接搞定,计数器已经包含了我们之前的逻辑

  打印(数据字典)

  柜台({ 苹果 :3,梨 :3,香蕉 :2})

  #Counter继承了dict,只是支持字典操作。

  #还提供了许多其他操作,其中一个是最常用的。

  #用于选择频率最高的元素。

  print(data_dict.most_common(2))

  [(苹果,3),(梨,3)]

  还是很简单的。

  这就是关于Python如何优雅地分组数据的文章。有关Python数据分组的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: