我有一个pandas.df,我试图删除所有可以被拒绝的假设。
以下是有问题的df的片段:
best value p_value
0 11.9549 0.986927
1 11.9588 0.986896
2 12.1185 0.985588
3 12.1682 0.985161
4 12.3907 0.983131
5 12.4148 0.982899
6 12.6273 0.980750
7 12.9020 0.977680
8 13.4576 0.970384
9 13.5058 0.969679
10 13.5243 0.969405
11 13.5886 0.968439
12 13.8025 0.965067
13 13.9840 0.962011
14 14.1896 0.958326
15 14.3939 0.954424
16 14.6229 0.949758
17 14.6689 0.948783
18 14.9464 0.942626
19 15.1216 0.938494
20 15.5326 0.928039
21 17.7720 0.851915
22 17.8668 0.847993
23 17.9662 0.843822
24 19.2481 0.785072
25 19.5257 0.771242
我想通过选择低于alpha
的元素来删除p_value大于关键阈值alpha
的元素。使用scipy.stats.chisqprob(chisq,df)计算p值,其中chisq
是卡方统计量,df
是自由度。这都是使用下面显示的自定义方法self.get_p_values
完成的。
def reject_null_hypothesis(self,alpha,df):
assert alpha>0
assert alpha<1
p_value=self.get_p_values(df) #calculates the data frame above
return p_value.loc[p_value['best value']
然后我使用以下方法调用此方法:
PE=Modelling_Tools.PE_Results(PE_file) #Modelling.Tools is the module and PE_Results is the class which is given the data 'PE_file'
print PE.reject_null_hypothesis(0.5,25)
根据我的阅读,这应该做我想要的,但我是pandas.df的新手,此代码返回未更改的
答案 0 :(得分:2)
运行时遇到任何错误?我问因为:
print PE.reject_null_hypothesis(0.5, 25)
在最后一个参数位置传入reject_null_hypothesis()
25
,一个int
对象而不是pandas.DataFrame
个对象。
(道歉。我会以此作为评论而不是答案回复,但我目前只有46个声誉,需要50个评论。)
答案 1 :(得分:2)
参考indexging with boolean array
df[ df.p_value < threshold ]
答案 2 :(得分:0)
原来有一种简单的方法可以做我想要的事情。以下是那些想要了解的人的代码。
def reject_null_hypothesis(self,alpha,df):
'''
alpha = critical threshold for chisq statistic
df=degrees of freedom
values below this critical threshold are rejected.
values above this threshold are not 'proven' but
cannot be rejected and must therefore be subject to
further statistics
'''
assert alpha>0
assert alpha<1
p_value=self.get_p_values(df)
passed= p_value[p_value.loc[:,'p_value']>alpha].index
return p_value[:max(passed)]