我正在使用Python和Pandas进行数据质量项目。我有一个输入数据框,其中每列都是分类数据,我想返回一个数据框,其中每列按顺序排列该列中最常出现的前10个类别,以及所述类别的名称(即键值对)或者带有分类变量的元组:在每个单元格中计数。)
答案 0 :(得分:0)
您可以以字典格式获取值计数对,如下所示:
df["column"].value_counts(False).to_dict()
您可以使用此方法迭代来填充数据框,如下所示:
#Import dependencies
import numpy as np
import pandas as pd
#Create dataframe with random data
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
#Create a 'result dataframe'
resultDf = pd.DataFrame(columns=list(df.keys()))
#Append value-count pairs to new dataframe
for column in df.keys():
_dict_ = df[column].value_counts(False).to_dict()
for index, key in enumerate(_dict_):
resultDf.loc[index, column] = [key,_dict_.get(key)]
答案 1 :(得分:0)
最简单的方法是使用MultiIndex
列
np.random.seed(0)
#Create dataframe with random data
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
columns = pd.MultiIndex.from_product((df.columns, ['index', 'count']), names= ['column', None])
result = pd.DataFrame(columns=columns, index=range(1, 11))
然后,除了循环列
之外,我没有别的办法for column_name, column in df.items():
top_10 = column.value_counts(normalize=False).iloc[:10]
result[(column_name, 'index')] = top_10.index
result[(column_name, 'count')] = top_10.values
column A B C D index count index count index count index count 1 81 4 32 5 3 3 67 4 2 46 3 79 4 5 3 0 3 3 82 3 99 3 19 3 35 3 4 20 3 50 3 51 3 28 3 5 23 3 53 3 41 3 11 3 6 24 3 13 3 36 3 58 2 7 41 3 39 3 47 2 72 2 8 42 3 87 3 35 2 32 2 9 71 3 58 2 61 2 65 2 10 0 3 91 2 58 2 98 2