数据质量 - 熊猫

时间:2018-06-18 10:54:31

标签: python pandas

我正在使用Python和Pandas进行数据质量项目。我有一个输入数据框,其中每列都是分类数据,我想返回一个数据框,其中每列按顺序排列该列中最常出现的前10个类别,以及所述类别的名称(即键值对)或者带有分类变量的元组:在每个单元格中计数。)

2 个答案:

答案 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

构建结果DataFrame
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