【问题标题】:Is there an easy way to compute mean and standard deviation from Pandas value_counts Series?有没有一种简单的方法可以计算 Pandas value_counts 系列的平均值和标准差?
【发布时间】:2020-03-20 15:11:42
【问题描述】:

为了测试(大)样本之间是否存在统计差异,我想从 value_counts 系列计算平均值和 sd:

在[0]中:counts.value_counts()

0    783 
1   1128  
2    744  
3    366  
4    119   
5     38   
6     10    
7      3

我知道通过做类似的事情来计算平均值并不难

total = 0
for idx, val in counts.value_counts().iteritems():
    total = total + idx*val
m = total/sum(sum(counts.value_counts()))

我在问是否有更短的方法来做到这一点。

我也在问如何从 counts.value_counts() 输出计算标准偏差。

【问题讨论】:

    标签: python pandas statistics


    【解决方案1】:

    你实际上可以做到这些。

    counts.value_counts().mean()
    counts.value_counts().median()
    counts.value_counts().mode()
    counts.value_counts().std()
    

    【讨论】:

    • 这给了我实际值的平均值(和标准)。我想知道索引的平均值(?)。所以从我的例子来看,平均值是 1.397994。
    【解决方案2】:

    您可以使用 pandas 系列索引来获取索引的平均值

    import pandas as pd 
    import numpy as np
    
    
    df = pd.DataFrame([1,2,3,4,4,4,4,4], columns = ['num'])
    
    np.mean(df['num'].value_counts().index)
    #op
    2.5
    

    【讨论】:

      【解决方案3】:

      您可以通过使用numpy.average 进行加权平均来从值计数中获得平均值:

      counts = df.value_counts()
      np.average(counts.index, weights=counts)
      1.3979943591350674
      

      Stdev 有点棘手,因为使用权重进行分析不太常见,但看起来statsmodels 中有些东西可以提供帮助:

      from statsmodels.stats.weightstats import DescrStatsW
      
      weighted_stats = DescrStatsW(counts.index, weights=counts, ddof=0)
      weighted_stats.mean, weighted_stats.std
      (1.3979943591350674, 1.1904965747995073)
      

      【讨论】:

        【解决方案4】:

        不要忘记 describe()。它可以用于系列或数据框。

        DataFrame.describe(percentiles=None, include=None, exclude=None, datetime_is_numeric=False)

        df.describe() # returns dataframe containing describes for each column.
        df['counts'].describe() # describe for values
        df['counts'].value_counts().describe() # describe for value_counts()
        df.value_counts().describe()['mean'] # returns mean
        df['counts'].describe()[['mean','std']] # returns mean and std
        

        【讨论】:

          猜你喜欢
          • 2020-12-01
          • 2014-03-21
          • 2016-04-17
          • 1970-01-01
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          相关资源
          最近更新 更多