突然发现本人最多浏览量的博客是这篇,真是诚惶诚恐,当时居然不知道用 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了!