python计算某一列各项出现次数, 并输出各行数据

今天在工作中遇到一个需求:有一个ABC三列的表,其中A列数据大量重复,且BC列不同。现在需要根据A列的数据,汇总A列去重并输出重复次数最多的100行(N行)

原始表类似于这样:

A B C
FFFEFFFEFFF 71956 1
FFFF7FFF7FF 28994 2
DFF4DFF4DFF 68109 3
1FF807F8000 63125 4
3FFF7FFF7FF 27084 5
FFFFFFFFFAF 90016 6
FFBFFFBF078 98219 7
1FF03EE33FF 23629 8
CFC0F8FAFCF 72986 9
8FFFF1F1F1E 33263 10
FFFFFFFFFFF 94116 11

如果用excel,解决办法就是做一个透视表,求出A列各项目重复数据次数,然后在vlookup求出各BC列的值即可

但是如果元数据超过了1万行,电脑会卡死的。

现在通过Python即可30秒求出100万行,A列的计数项:

解决思路

1、先导入文件  

pd.read_csv ,设置表头names,设置分割符号:sep,设置标题行:skiprows
2、求助A列数据的各项目重复次数

loc=da['A'].value_counts()
3、取出前1000行

loc=loc[:N].keys()#前置前N行,加上key是表示只取值,取出A列的那个数据,不加key()就是输出A列数据+重复次数
4、取出数据,并根据A列去重

C=da.loc[da['A'].isin(loc)]#限制A列在 loc的值内

C=C.drop_duplicates(['A'])#根据A列去重
5、保存

C.to_csv("22.csv",encoding='utf-8')
不知道这些思路是否对你有帮助,完整代码可见:
import pandas as pd
import numpy as np
da=pd.read_csv('4.txt',names=['A','B','C'],sep='\s+', skiprows=[0], header=None,encoding='utf-8');
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

da=da.unique()

print(da['A'].value_counts())

loc=da['A'].value_counts()[:10000].keys()#前置前3行,加上key是表示只取值

print(loc)

C=da.loc[da['A'].isin(loc)]#限制A列在 loc的值内
C=C.drop_duplicates(['A'])#根据A列去重
print(C)
C.to_csv("22.csv",encoding='utf-8')

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注