选择大于临界阈值的pandas数据帧的元素

时间:2015-08-19 11:32:36

标签: python pandas

我有一个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的新手,此代码返回未更改的

3 个答案:

答案 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)]