python实现统计dataframe某列里的某个元素的数量、并且根据数量排序(超级简单)

突然发现本人最多浏览量的博客是这篇,真是诚惶诚恐,当时居然不知道用 pandas 里的value_counts 这个函数,是专门统计每个值 的数量的,用这个函数,题目中的功能瞬间就完成了,完全不用旧答案里的方法。

#以下是新建一个数组 里面元素是“obj+数字” 让大家看得更清楚
import pandas as pd
import numpy as np
data=pd.DataFrame(columns=["a","b","c"],data=np.random.randint(10, size=(100, 3)))

data['a']= ["obj"+ str(item) for item in data['a']]
data['b']= ["obj"+ str(item) for item in data['c']]
data['c']= ["obj"+ str(item) for item in data['c']]

#用 value_counts 统计数量,这里 要变成list,
#否则就不能迭代。 
data['a'].value_counts()
rank_a= [item for item  in data['a'].value_counts().index]
rank_b= [item for item  in data['b'].value_counts().index]
rank_c= [item for item  in data['c'].value_counts().index]


data_sored=pd.DataFrame(columns=["a","b","c"])

#实现 “b” 列里的前三名
for item in rank_b[:3]:
    data_sored=data_sored.append(data[data['b']==item])


=================下面是原答案,方法非常繁琐…不要看

写一个python小脚本的时候遇到一个问题,如何统计dataframe某列里的某个元素的数量、并且根据数量排序。
比如,dataframe[‘week’] 里,周一有5个,周二有8个…
然后排序的时候,周二排在周一前面。
代码如下:

#针对target 数据 根据数量进行排序
data_target=data['target']

#得到针对target的去重
data_target_de_dup=data['target'].drop_duplicates()

#建立一个map 实现按照target的计数操作
map={target:0 for target in data_target_de_dup}
for target in list(data_target):
    map[target]+=1

#排序操作,应为得到的是元组,所以元组要再拆成dict,然后再变成list
map_sorted_tuple=sorted(map.items(),key=lambda item:item[1],reverse=1)
map_sorted={con[0]:con[1] for con in list(map_sorted_tuple) }
map_sorted_list=list(map_sorted.keys())

#声明一个dataframe
data_sorted=pd.DataFrame(columns=data.columns)
#这里实现提取 dataframe 数据里,['target'] 所占数量排前20 的
for target in map_sorted_list[:20]:
    data_sorted=data_sorted.append(data.loc[(data['target'] == target)])

这样就得到根据某列里某元素的数量排序的dataframe了!

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值