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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。