Excel去重计数,8种方法!历史最全!

print(perm)

问题很常见,但是对新手来说又比较棘手,所以我们来一期,系统讲讲,个人我个人的知识储备,大概写了8种,涵盖Excel的方方面面!一种也满足一下大家对于Python的好奇!

python 字典去重 python字典去重python 字典去重 python字典去重


python 字典去重 python字典去重


友情提醒:应该是目前你所能见到的最全面的了!先收藏!

需求:统计对应区域中不重复的人员个数?

方法1:辅助列+函数

这个方法函数新手使用,帮助刚入门的同学解决问题!

=SUMPRODUCT(($B$2:$B$15=$E2)/COUNTIFS($A$2:$A$15,$A$2:$A$15))

没有条件单纯的统计不重复内容,基本大家都知道使用SUM(1/COUNTIF(区域,区域))套路!如果有条件呢,我们可以把多个条件组合到一起,就变成一列了,然后使用单列不重复统计,再根据区域式的等于需求的区域过滤!

如果你是一个函数高手,那么不用辅助列也可以!

方法2:函数法(无辅助列)

这个应该不需要我过多的解释,只是把辅助列放到了公式中,单条件变多条件!

好吧!你说函数法都太难了,有没有小白可以实现的,试试吧!

方法3:表法(新手)

要点说明:在创建表时必须勾选添加到数据模型才可以使用不重复统计!

如果觉得上面的方法过于小白,那我们可以试试Power Query

方法4:Power Query

点击【转换】-【数据分组】-【非重复计数】确定即可!

在PQ中使用自带的分组功能,也能轻松搞定这样的需求!依旧不能再简单!(2, 1, 2, 1, 3, 3)

如果你想稍微酷点,那么使用VBA怎么样?

方法5:VBA

去重统计本是字典的强项,但是条件去重确实一点麻烦,不过可以使用双层字典即可轻松搞定!VBA爱好者,可以参考一下这种写法!

方法6:Power Pivot-DAX度量值

写个度量值,扔到表值字段即可!

其实到这里,也就不多了,不要总是说去重统计不会!

突然想起好久没写的SQL,好像我也懂一点点!要不写一下SQL,顺便练个手!

方法7:SQL法

select地区,count()as不重复人数from(select distinctfrom[data$]where地区<>null)group by地区

先使用子查询去重,再进行分组聚合计数即可!有SQL大佬欢迎提供好的思路!

好吧!我再写一个Python就收工吧!

方法8:番外-Python

df.drop_duplicates().groupby('地区').count()

pandas在数据统计方面再次刷新了我的认知,一句搞定!不要鼓吹python

但是pandas确实是一个数据分析非常好用的库,谁用谁知道!

基因家族:用python处理blast结果区域延伸的问题

方法一:不用语法糖@符号

tblastn比对出来候选HSP区段,我们需要根据一定的基因长度范围来进行区域延伸去重叠,然后进行exonerate或者genewise建模。对HSP区域的延伸要考率基因的长度以及目标基因组scafflod or chromosome长度,不是一件容易的事情。

这里采用了dataclass以及改写 slots 存储数据方式,减少内存占用以及加快读取速度,attrgetter对列表字典结构排序,biopython里的SeqIO.parse感觉挺慢的,不过懒得重写了,用了据说更快的SimpleFastaParser来解析,实际测试下来速度确实更快,主要是用来存储scaffold或chromosome长度,以防延伸超出边界。

去重叠的原理在于先排序,然后判断前一区间的末尾是否小于后一区间开始,若为则重叠,根据长度/得分来判断删除前一区间还是后一区间。

以下运行得到的结果仍然是blast的tabular格式(之后可以经过一些简单的shell命令处理,可转成bed格式,结合bedtools批量提取序列)。

注:如果你需要去重的格式不为blast tabular,简单的利用一些工具如awk/sed/perl/python/shell各种改变格式就好,只需要第二列的id,第九列的序列起始,import itertools第十列的序列结束,第十二列的得分有意义,作为排序用到的字段,其余字段都可缺省

python?

=SUMPRODUCT(($A$2:$A$15=$D2)/COUNTIFS($A$2:$A$15,$A$2:$A$15,$B$2:$B$15,$B$2:$B$15))

Python的是collections

关于set的定义:在我看来就像一个篮子,你可以往里面存东西也可往里面取东西,但是这些东西又是无序的,你很难指定单独去取某一样东西;同时它又可以通过一定的方法筛选去获得你需要的那部分东西。故可以 创建、增、删、关系运算。

里面有元祖,列表,,字典

tuple list set dict

原组是不能修改的列表

是没有重复的列表

字典是键值对

python极简教程06:生成式和装饰器

for perm in permutations:

测试奇谭,BUG不见。

这一场,主讲python的 生成式和装饰器。

目的:掌握四种生成式(列表、生成器、、字典),装饰器的原理和使用。

能够用一行代码,快速高效的生成数据。(这就不需要再通俗的讲解了吧)

举个例子:提取1-100之间的奇数

使用(),而不是 []

举个例子:列表元素去重

举个例子:字典kv反转

装饰器的作用:增强函数的功能,确切的说,可以装饰函数,也可以装饰类。

初学的你,还是太难理解?

你开,觉得自己的颜值不在线,于是乎,你===字符串使用美颜,增强装饰自己的颜值。

对于美颜这个功能来说,你可以用,我可以用,所有人都可以用,以此来增强装饰自己的颜值。

方法二:采用语法糖@符号

再举个例子:计算函数时间

python怎么输出数组中的元素

其本质使用的是Power Pivot的不重复统计功能!

打印列表中出现前十的元素,可以利用列表的count属性,可以计数,然后根据数量多少排序 来输出元素

a = [1,'b','b',3,3,3,'d','d','d','d',5,5,5,5,5,'f','f','f','

f','f','f',7,7,7,7,7,7,7,'h','h','h','h','h','h','h','h',9,9

,9,9,9,9,9,9,9,'j','j','j','j','j','j','j','j','j','j',11,11

,11,11,11,11,11,11,11,11,11]

b = {} #定义空字典

for d in set(a): #去重复的值,set

b[a.count(d)] = d #去重后做计数,把数量和值写到字典b

for e in rrsed(sorted(b.keys())[-10:]):

print e,':',b[e] #排序列表键值并取后10个(数量最正下标 0 1 2 3 4 5大的10个),翻转后打印出数量与值。

求助一个Python问题,用字典与的知识解下面这个题,感谢大佬帮忙ԅ?

#根据课程名定义三个,course1,course2,course3

course1 = set(('李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清'))

course2 = set(('施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌'))

course3 = set(('陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清'))

#使用的union函数对3个元素进行去重整合,得到1个人员没有重复的choose_courses_person

choose_courses_person = course1.union(course2,course3)

#总人数为25人,所以用25减去choose_courses_person的长度就是没有选课的人数

not_choose_num = 25-len(choose_courses_person)

print("没有选课的同学有{}人".format(not_choose_num))

#定义3个空列表,用来存放选1门课,2门课,3门课的人员(根据标题说的数据类型没有列表,这里也可以使用空,如course_one=set(),后面的append方法改为add)

course_one = []

course_two = []

course_three = []

#num用来存放下面for循环中每个person到底选了几门课

num = 0lst = [1,2,3,4,5]

for person in choose_courses_person:

if person in course1:

num +=1

if person in course2:

num +=1

if person in course3:

num +=1

if num == 1:

course_one.append(person)

if num ==2:

course_two.append(person)

if num ==3:

course_three.append(person)

#每个person执行后要将num清零,这样不会影响下个person

num = 0

print("有{}个学生修选了1门课,他们是: {}".format(len(course_one), ','.join(course_one)))

print("有{}个学生修选了2门课,他们是: {}".format(len(course_two), ','.join(course_two)))

print("有{}个学生修选了3门课,他们是: {}".format(len(course_three), ','.join(course_three)))

把上面的内容放到.py文件中,给执行权限,运行后结果为:

没有选课的同学有12人

有9个学生修选了1门课,他们是: 施然,刘潇,孙一航,李芳芳,施小冉,刘培良,黄煌,李雷,王晓刚

有3个学生修选了2门课,他们是: 张玉,司马清,陈红静

有1个学生修选了3门课,他们是: 方向

.上面写的这个有些地方可能不太符合题目要求,希望能有所帮助吧.

已知信息可以用字典表示:

[]列表中分别是课程123中的报名的同学的名字

问题1:这个字典d中lesson123的元素合并去重后就是所有报名的同学人数n,25-n就是

问题2:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的两个

问题3:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的三个

问题4:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的一个,未重复报名

希望我的回答对你有帮助,你的采纳就是的鼓励~

people=['李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清','施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌','陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清']

newdic={}

for i in people:

if newdic.get(i):

newdic[i]+=1在PP中使用DAX函数DISTINCTCOUNT,可以非常简单的统计不重复的个数

newdic[i]=1

print(25-len(set(people))) #没选课人数

循环newdic,key是人名,value是课程数量

python?

Python的是collections

里面有元祖,列表,,字典

tuple list set lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5] dict

原组是不能修改的列表

是没有重复2--reduce()函数的列表

字典是键值对

python中有哪些基本数据类型

python的基本数据类型有哪些?下面一一给大家介绍:

1、数字 ---> int类

当然对于数字,Python的数字类型有int整型、long长整型、float浮点数、complex复数、以及布尔值(0和1),这里只针对int整型进行介绍学习。

在Python2中,整数的大小是有限制的,即当数字超过一定的范围不再是int类型,而是long长整型,而在Python3中,无论整数的大小长度为多少,统称为整型int。

其主要方法有以下两种:

int -->将字符串数据类型转为int类型, 注:字符串内的内容必须是数字

bit_length() -->将数字转换为二进制,并且返回最少位二进制的位数

2、布尔值 --->bool类

对于布尔值,只有两种结果即True和False,其分别对应与二进制中的0和1。而对于真即True的值太多了,我们只需要了解即Flase的值有哪些---》None、空(即 [ ]/( ) /" "/{ })、0;

相关:《python视频教程》

3、字符串 --->str类

关于字符串是Python中最常用的数据类型,其用途也很多,我们可以使用单引号 ‘’或者双引号“”来创建字符串。

字符串是不可修改的。所有关于字符我们可以从 索引、切片、长度、遍历、删除、分割、清除空白、大小写转换、判断以什么开头等方面对字符串进行介绍。

创建字符串

切片

索引--> index()、find()

index()与find()的不同之处在于:若索引的该字符或者序列不在字符串内,对于index--》ValueError: substring not found,而对于find -->返回 -1。

注:len()方法-->同样可以用于其他数据类型,例如查看列表、元组以及字典中元素的多少。

删除 --> del

判断字符串内容 --> isalnum()、isalpha()、isdigit()

大小写转换 --> capitalize()、lower()、upper()、title()、casefold()

判断以什么开头结尾 --> startswith()、endswith()

扩展-->expandtabs()

格式化输出-->format()、format_map()

join方法

分割 --> split()、partition()

替代 -->replace

替换 -->makestran 、translate

4、列表 --->list类

列表是由一系列特定元素顺序排列的元素组成的,它的元素可以是任何数据类型即数字、字符串、列表、元组、字典、布尔值等等,同时其元素也是可修改的。

其形式为:

names = ['little-five","James","Alex"]2 #或者3 names = list(['little-five","James","Alex"])

插入索引、切片

追加-->append()

拓展-->extend()

注:扩展extend与追加append的区别:-->前者为添加将元素作为一个整体添加,后者为将数据类型的元素分解添加至列表内。例:

insert() -->插入

pop() -->取出

remove()-->移除、del -->删除

sorted()-->排序,默认正序,加入rrse =True,则表示倒序

5、元组 --->tuple类

元组即为不可修改的列表。其于特性跟list相似。其使用圆括号而不是方括号来标识。

#元组name = ("little-five","xiaowu")print(name[0])

6、字典 --->dict类

字典为一系列的键-值对,每个键值对用逗号隔开,每个键都与一个值相对应,可以通过使用键来访问对应的值。无序的。

键的定义必须是不可变的,即可以是数字、字符串也可以是元组,还有布尔值等。

而值的定义可以是任意数据类型。

遍历 -->s、keys、values

7、 -->set类

的特性:

1、去重

2、无序

3、每个元素必须为长度 -->len()不可变类型即(hashable类型,可作为字典的key)。

创建:set、frozenset

增: add、update

关系运算:交集 & 、并集 | 、集 - 、交补集 ^ 、 issubset 、isupperset

判断两个的关系是否为子集、父集 --> issubset 、isupperset

深入理解Python reduce函数

字典是一种key---value的数据类型,使用就像我们使用字典,通过拼音或笔画查找字的详细类容

例如上面的例子,实现一个整形的累加。设lst = [1,2,3,4,5],实现累加的方式有很多:

# 原始列表

sum(lst)

第二种:循环方式。

def customer_sum(lst):

result = 0

result+=x

return result

def customer_sum(lst):

result = 0

while lst:

temp = lst.pop(0)

result+=temp

return result

if name ==" main ":

print customer_sum(lst)

第三种:递推求和

def add(lst,result):

if lst:

temp = lst.pop(0)

temp+=result

return add(lst,temp)

return result

if name ==" main ":

print add(lst,0)

第四种:reduce方式

print reduce(lambda x,y:x+y,lst)

print reduce(lambda x,y:x+y,lst,0)

def add(x,y):

return x+y

print reduce(add, lst)

def add(x,y):

return x+y

print reduce(add, lst,0)

有一个序列,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个所有键的重复个数,例如1出现了两次,2出现了两次等。大致的思路就是用字典存储,元素就是字典的key,出现的次数就是字典的value。方法依然很多

种:for循环判断

def statistics(lst):

dic = {}

for k in lst:

if not k in dic:

dic[k] = 1

dic[k] +=1

return dic

print(statistics(lst))

第二种:比较取巧的,先把列表用set方式去重,然后用列表的count方法

def statistics2(lst):

m = set(lst)

dic = {}

for x in m:

dic[x] = lst.count(x)

print statistics2(lst)

第三种:用reduce方式

def statistics(dic,k):

if not k in dic:

dic[k] = 1

dic[k] +=1

return dic

print reduce(statistics,lst,{})

或者

d = {}

d.extend(lst)

print reduce(statistics,d)

通过上面的例子发现,凡是要对一个进行作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现。

python中都有哪些数据类型

3--实例解释

python中数据类型有:整型、长整型、浮点型、字符串类型、布尔类型、列表类型、元组类型、字典类型、类型。

顾名思义:增强函数或类的功能的一个函数。

数据类型是每种编程语言必备属性,只有给数据赋予明确的数据类型,计算机才能对数据进行处理运算,因此,正确使用数据类型是十分必要的,不同的语言,数据类型类似,但具体表示方法有所不同,以下是Python编程常用的数据类型:

1. 数字类型

Python数字类型主要包括int(整型)、long(长整型)和float(浮点型),但是在Python3中就不再有long类型了。

int(整型)

在32位机器上,整数的位数是32位,取值范围是-231~231-1,即-2147483648~214748364;在64位系统上,整数的位数为64位,取值范围为-263~263-1,即9223372036854775808~9223372036854775807。

long(长整型)

Python长整型没有指定位宽,但是由于机器内存有限,使用长的长整数数值也不可能无限大。

float(浮点型)

浮点型也就是带有小数点的数,其精度和机器有关。

complex(复数)

Python还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。

2. 字符串

在Python中,加了引号的字符都被认为是字符串,其声明有三种方式,分别是:单引号、双引号和三引号;Python中的字符串有两种数据类型,分别是str类型和unicode类型,str类型采用的ASCII编码,无法表示中文,unicode类型采用unicode编码,能够表示任意字符,包括中文和其他语言。

3. 布尔型

和其他编程语言一样,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False()。

4. 列表

列表是Python中使用最频繁的数据类型,中可以放任何数据类型,可对进行创建、查找、切片、增加、修改、删除、循环和排序作。

5. 元组

元组和列表一样,也是一种序列,与列表不同的是,元组是不可修改的,元组用”()”标识,内部元素用逗号隔开。

6. 字典

字典是一种键值对的,是除列表以外Python之中最灵活的内置数据结构类型,列表是有序的对象,字典是无序的对象。

7.

是一个无序的、不重复的数据组合,它的主要作用有两个,分别是去重和关系测试。

课程:Python3机器学习快速入门(黑马程序员)