如何从Pandas的value_counts Series计算均值和标准差?

3

为了测试两个(大型)样本之间是否存在统计学差异,我想从一个value_counts序列中计算平均值和标准差:

In [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()输出中计算标准差。

4个回答

2
你实际上可以做到这些。
counts.value_counts().mean()
counts.value_counts().median()
counts.value_counts().mode()
counts.value_counts().std()

这个给我实际值的平均数(和标准差)。我想要索引的平均数。所以从我的例子中,平均数将是1.397994。 - jrip

1
你可以使用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

0
不要忘记使用describe()函数。它可以用于Series或DataFrame。 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

0

您可以使用numpy.average进行加权平均,从而从值计数中获取平均值:

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

计算标准差稍微有点棘手,因为使用权重进行分析比较少见,但看起来在 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接