资讯专栏INFORMATION COLUMN

如何用Python对数据进行分组

89542767 / 657人阅读


  小编写这篇文章的主要目的,就是告诉大家一些知识,告诉大家如何使用Python对数据进行分组,另外,相关的代码,也会给贴出来,下面就给大家详细的解答下。


  假如我们这儿有相关数据:


  data=[
  ("apple",30),("apple",35),
  ("apple",32),("pear",60),
  ("pear",32),("pear",60),
  ("banana",102),("banana",104)
  ]
  #我们希望变成如下格式
  """


  [('apple',[30,35,32]),
  ('pear',[60,32,60]),
  ('banana',[102,104])]
  """
  假如要是你的话,你应该要怎么去写这个代码呢?
  data=[
  ("apple",30),("apple",35),
  ("apple",32),("pear",60),
  ("pear",32),("pear",60),
  ("banana",102),("banana",104)
  ]
  data_dict={}
  for name,count in data:
  if name not in data_dict:
  data_dict[name]=[]
  data_dict[name].append(count)
  print(data_dict)
  """
  {'apple':[30,35,32],
  'pear':[60,32,60],
  'banana':[102,104]}
  """


 

   print(list(data_dict.items()))
  """
  [('apple',[30,35,32]),
  ('pear',[60,32,60]),
  ('banana',[102,104])]
  """


  上述代码的书写方式是完全没有任何问题的,那么怎样才能写的更好一些,可以使用setdefault方法


  data=[
  ("apple",30),("apple",35),
  ("apple",32),("pear",60),
  ("pear",32),("pear",60),
  ("banana",102),("banana",104)
  ]
  data_dict={}
  for name,count in data:
  #setdefault(k,v)含义如下
  #当k不存在时,将k:v设置在字典中,并返回v
  #当k存在时,直接返回k对应值
  data_dict.setdefault(name,[]).append(count)
  print(list(data_dict.items()))
  """
  [('apple',[30,35,32]),
  ('pear',[60,32,60]),
  ('banana',[102,104])]
  """


  setdefault算是一个使用比较常见的方法了,但是就是使用率不高,每次调用的时候都会调用一个空值,所以这就会比较麻烦了。


  from collections import defaultdict
  data=[
  ("apple",30),("apple",35),
  ("apple",32),("pear",60),
  ("pear",32),("pear",60),
  ("banana",102),("banana",104)
  ]
  #里面接收一个callable
  #当访问的k不存在时,返回callable调用之后的值
  data_dict1=defaultdict(list)
  for name,count in data:
  data_dict1[name].append(count)
  print(list(data_dict1.items()))
  """
  [('apple',[30,35,32]),
  ('pear',[60,32,60]),
  ('banana',[102,104])]
  """
  #也可以指定为set
  data_dict2=defaultdict(set)
  for name,count in data:
  data_dict2[name].add(count)
  print(list(data_dict2.items()))
  """
  [('apple',{32,35,30}),
  ('pear',{32,60}),
  ('banana',{104,102})]
  """


  总的来说,defaultdict和字典的setdefault方法非常类似,我们使用setdefault即可。


  当然啦,关于分组,还有一种特殊情况,就是词频统计。假设我们想统计可迭代对象中,每个元素出现的次数该怎么做呢?


  data=["apple","apple","apple",
  "pear","pear","pear",
  "banana","banana"]
  data_dict={}
  for item in data:
  #此处不能使用setdefault,因为它是函数
  #.setdefault(item,0)+=1是不符合语法规则的
  if item not in data_dict:
  data_dict[item]=0
  data_dict[item]+=1
  print(data_dict)
  """
  {'apple':3,'pear':3,'banana':2}
  """
  #或者使用defaultdict
  from collections import defaultdict
  data_dict=defaultdict(int)
  for item in data:
  data_dict[item]+=1
  print(data_dict)
  """
  defaultdict(<class'int'>,
  {'apple':3,'pear':3,'banana':2})
  """


  然而说到词频统计,我们还可以使用collections下的Counter类。


  from collections import Counter
  data=["apple","apple","apple",
  "pear","pear","pear",
  "banana","banana"]
  data_dict=Counter(data)
  #直接搞定,Counter已经包含了我们之前的逻辑
  print(data_dict)
  """
  Counter({'apple':3,'pear':3,'banana':2})
  """
  #Counter继承dict,除了支持字典操作之外
  #还提供了很多其它操作,其中一个就是most_common
  #用于选择出现频率最高的几个元素
  print(data_dict.most_common(2))
  """
  [('apple',3),('pear',3)]
  """


  综上所述,使用Python进行分组就为大家介绍到这里了,希望可以为各位读者带来帮助。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127690.html

相关文章

  • 功能式Python中的探索性数据分析

    摘要:在中运行不同的实验似乎比试图在中进行这种探索性的操作更有效。理论上,我们可以在中做很多的探索。我们如何继续第一步是获取格式的原始数据。这些列将包含来自使用该代理键的一个请求的一行数据。这是重构的另一部分。数据的最终显示保持完全分离。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 这里有一些技巧来处理日志文件提取。假设我们正在查看一些Enterprise Splunk提取。...

    phodal 评论0 收藏0
  • 我所理解的正则表达式

    摘要:关于,新手理解起来可能比较困难,尤其是一些很牛逼的预查正则表达式。非贪婪与贪婪的问题贪婪出现在这种不确定数量的匹配中,所谓的贪婪,表示正则表达式在匹配的时候,尽可能多的匹配符合条件的内容。 学习了半年的正则表达式,也不能说一直学习吧,就是和它一直在打交道,如何用正则表达式解决自己的问题,并且还要考虑如何在匹配大量的文本时去优化它。慢慢的觉得正则已经成为自己的一项技能,逐渐的从一个正则表...

    _Zhao 评论0 收藏0
  • 我所理解的正则表达式

    摘要:关于,新手理解起来可能比较困难,尤其是一些很牛逼的预查正则表达式。非贪婪与贪婪的问题贪婪出现在这种不确定数量的匹配中,所谓的贪婪,表示正则表达式在匹配的时候,尽可能多的匹配符合条件的内容。 学习了半年的正则表达式,也不能说一直学习吧,就是和它一直在打交道,如何用正则表达式解决自己的问题,并且还要考虑如何在匹配大量的文本时去优化它。慢慢的觉得正则已经成为自己的一项技能,逐渐的从一个正则表...

    K_B_Z 评论0 收藏0
  • python 正则表达式

    摘要:正则表达式是一种用来匹配字符串的强有力的武器。正则表达式匹配如果直接给出字符,就是精确匹配。模块提供模块,包含所有正则表达式的功能。分组除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它匹配了,否则,该字符串就是不合法的。 showImg...

    孙淑建 评论0 收藏0
  • 何用Python进行数据分析?

    摘要:编程基础要学习如何用进行数据分析,数据分析师建议第一步是要了解一些的编程基础,知道的数据结构,什么是向量列表数组字典等等了解的各种函数及模块。数据分析师认为数据分析有的工作都在处理数据。 showImg(https://segmentfault.com/img/bVbnbZo?w=1024&h=653); 本文为CDA数据分析研究院原创作品,转载需授权 1.为什么选择Python进行数...

    lifefriend_007 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<