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