我正在使用Python和Pandas做一个数据质量项目。我有一个输入数据,其中每一列都是分类数据,我想返回一个数据,其中每一列包含该列中最常见的10个类别,以及所述类别的名称(即键值对或带有分类变量的元组:每个单元格中的计数)。
发布于 2018-06-18 11:55:30
最简单的方法是使用一个DataFrame列构建结果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列A B C D指数计1 81 4 32 5 3 3 67 4 46 3 79 3 5 3 0 3 3 82 3 99 3 19 3 35 3 4 20 350 3 51 3 28 3 23 3 53 3 41 3 11 3 24 3 13 3 36 3 58 2 7 41 3 37 2 72 2 8 42 3 87 3 35 2 32 2 9 71 358 2 61 2 65 2 10 0 3 91 2 58 2 98
发布于 2018-06-18 11:04:11
您可以获得字典格式的值计数对,如下所示:
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)]https://stackoverflow.com/questions/50907880
复制相似问题