有没有一种简单的方法可以从Pandas value_counts系列计算均值和标准差?

时间:2019-11-25 10:41:59

标签: python pandas statistics

为了测试在(大)样本之间是否存在统计差异,我想从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()输出中计算标准偏差。

4 个答案:

答案 0 :(得分:1)

您实际上可以做到这些。

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

答案 1 :(得分: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

答案 2 :(得分:0)

通过使用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)

答案 3 :(得分:0)

不要忘记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