问题描述
我有一个包含名称、类型和每场比赛营业额的数据框。下面给出了该 df 的示例。
Name Type Turnover per game
kevin A 5
duke B 10
jonas A 12
angly A 2
anjelo B 10
wily A 4
nick A 8
我想要做的是进行一个假设检验来检查,A 型球员的平均失误比 B 型球员少。。
我尝试了什么:
首先,按类型分组:
df.groupby('Type').mean()
但我不知道如何实施假设检验来检查上述条件。
解决方法
Hypothesis testing 可以用 ttest_ind 完成:
import pandas as pd
from scipy import stats
data = {'Name': ['kevin','duke','jonas','angly','anjelo','wily','nick'],'Type': ['A','B','A','A'],'Turnover': [5,10,12,2,4,8]}
df = pd.DataFrame(data)
t,p = stats.ttest_ind(df.Turnover[df.Type.eq('A')],df.Turnover[df.Type.eq('B')],equal_var=False,alternative='less')
if p < 0.05:
print('Type A players have average less turnovers than Type B players')
else:
print('Null hypothesis (equal means) cannot be rejected.')
在您的示例中,A
类和 B
类球员的失误率相同的原假设将被拒绝,而 A
类球员的平均失误率低于 {{ 类型的替代假设1}} 玩家将被接受。有关详细信息,请参阅上面链接的维基百科文章中的解释部分。
你提到的假设检验,如果我理解正确的话,看起来很紧张。
按“类型”分组获取营业额平均值
df_group_by_type = df.groupby('Type')['Turnover per game'].apply(np.mean)
df_group_by_type
Type
A 6.2
B 10.0
然后只检查所需的条件
df_group_by_type['A'] < df_group_by_type['B']
True