【问题标题】:How to count uniques for each column in a pandas dataframe?如何计算熊猫数据框中每一列的唯一性?
【发布时间】:2018-06-10 06:18:42
【问题描述】:

我在下面有一个代码,它在我的数据框的每一列中创建一个缺失值的汇总表。我希望我可以建立一个类似的表来计算唯一值,但是 DataFrame 没有 unique() 方法,只有每列独立。

def missing_values_table(df): 
    mis_val = df.isnull().sum()
    mis_val_percent = 100 * df.isnull().sum()/len(df)
    mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
    mis_val_table_ren_columns = mis_val_table.rename(
    columns = {0 : 'Missing Values', 1 : '% of Total Values'})
    return mis_val_table_ren_columns

(来源:https://stackoverflow.com/a/39734251/7044473

我怎样才能为唯一值完成相同的操作?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用名为 'nunique()' 的函数来获取所有列的唯一计数

    df = pd.DataFrame(np.random.randint(0, 3, (4, 3)))
    print(df)
       0  1  2
    0  2  0  2
    1  1  2  1
    2  1  2  2
    3  1  1  2
    
    count=df.nunique()
    print(count)
    0    2
    1    3
    2    2
    dtype: int64
    

    【讨论】:

      【解决方案2】:

      您可以使用pd.unique 函数创建一系列唯一值计数。例如:

      >>> df = pd.DataFrame(np.random.randint(0, 3, (4, 3)))
      >>> print(df)
         0  1  2
      0  2  0  2
      1  1  2  1
      2  1  2  2
      3  1  1  2
      
      >>> pd.Series({col: len(pd.unique(df[col])) for col in df})
      0    2
      1    3
      2    2
      dtype: int64
      

      如果你真的想要每个值在每一列中出现的次数,你可以用pd.value_counts做类似的事情:

      >>> pd.DataFrame({col: pd.value_counts(df[col]) for col in df}).fillna(0)
           0  1    2
      0  0.0  1  0.0
      1  3.0  1  1.0
      2  1.0  2  3.0
      

      【讨论】:

        【解决方案3】:

        这不完全符合您的要求,但可能对您的分析有用。

        def diversity_percentage(df, columns):
            """
            This function returns the number of different elements in each column as a percentage of the total elements in the group.
            A low value indicates there are many repeated elements.
            Example 1: a value of 0 indicates all values are the same.
            Example 2: a value of 100 indicates all values are different.
            """
            diversity = dict()
        
            for col in columns:
                diversity[col] = len(df[col].unique())
        
            diversity_series = pd.Series(diversity)
            return (100*diversity_series/len(df)).sort_values()
        

        __

        >>> diversity_percentage(df, selected_columns)
        operationdate                0.002803
        payment                      1.076414
        description                 16.933901
        customer_id                 17.536581
        customer_name               48.895554
        customer_email              62.129282
        token                       68.290632
        id                         100.000000
        transactionid              100.000000
        dtype: float64
        

        但是,您始终可以直接返回 diversity_series,并且只会获得计数。

        【讨论】:

        • 谢谢,非常方便。探索新数据集时,我总是检查“多样性”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        相关资源
        最近更新 更多