日常答疑|Python实现分类频数统计

问题

群友提问:求每组数据中每个元素重复的个数,用什么函数?

严小样儿:安排!

咋一看,我觉得他问的我很懵B~于是,和他要了份数据,瞬间清楚了很多!

所以,需求就是求手机号前7位重复个数,安排!

安排

一、预览数据

df = pd.read_excel(r'C:/Users/Administrator/Desktop/新建 Microsoft Excel 工作表(3).xlsx')print(df.head(),end = '\n\n')df.info()

预览数据发现,数据格式不正确,需要先进行格式转换,以及防止隐私泄露,我们用一定的方法进行脱敏处理。

df = df.iloc[:,:3].astype(str)
print(df.head(),end = '\n\n')
df.info()

# 方法一
df['手机号'] = df['手机号'].str.split('.',expand = True)[0]
df['手机号'] = df['手机号'].apply(lambda x:x[:-3]+'***')
# 方法二
df['手机号前7位'] = df['手机号前7位'].str.replace('.0','')
df.tail()

二、删除无效值

idx = df[df['手机号']=='***'].indexdf.drop(idx,inplace = True)df.head()

接下来,进行统计手机号前7位重复个数。

n = df['手机号前7位'].value_counts()
df['手机号前7位重复个数'] = df['手机号前7位'].map(n)
df.tail()

当我满心欢喜地告诉他答案时候,他说不对啊!!!不同ID下,要分别统计,也就是说要看每一个ID下手机号前7位重复个数。于是,接着修改。

三、正确答案

# 化整为零
ID = df['ID'].unique()
result = []
for i in ID:
    df1 = df[df['ID']==i].copy()
    n = df1['手机号前7位'].value_counts()
    df1['手机号前7位重复个数'] = df1['手机号前7位'].map(n)
    result.append(df1)
r = pd.concat(result)
r.sample(10)

这一次,他没有再说什么!!嘻嘻嘻,为我的机智点赞~

不过,我觉得这个方法也许不是太好吧。但是,有没有更好的方法呢?

欢迎大家和我交流一下,感谢~

更多精彩

传送门1:日常答疑|Python向量化操作、矩阵运算

传送门2:日常答疑|Python处理时间格式并计算时间差值

传送门3:从报错开始梳理用Python连接MySQL数据库

传送门4:系列|七天PYTHON养成记之初识

传送门5:系列|七天PYTHON养成记之函数

传送门6日常答疑|MySQL删除重复数据踩过得坑

传送门7系列|七天PYTHON养成记之序列

看完,读完,要“在看” ↓↓↓

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值