我想用Pandas和皮尔逊做一个分组相关。
目前我有:
df = pd.DataFrame(np.random.randint(0,10,size=(1000, 4)), columns=list('ABCD'))
df.groupby(['A','B'])[['C','D']].corr().unstack().iloc[:,1]
然而,我想使用pearsonr(scipy包)计算相关性显著性,如下所示:
from scipy.stats import pearsonr
corr,pval= pearsonr(df['C'],df['D'])
我如何将groupby和pearsonr结合起来,就像这样:
corr,val=df.groupby(['A','B']).agg(pearsonr(['C','D']))
1条答案
按热度按时间waxmsbnn1#
如果我理解的话,你需要对
C
和D
之间的任何A
和B
组合进行皮尔森检验。要执行此任务,您需要像之前一样执行
groupby(['A','B'])
。(每个A,B
组合对应一个 Dataframe ),因此您可以通过apply
方法将stats.pearsonr
应用于这些 Dataframe 中的任何一个。(r,相关指数),对于p值,您还可以将pearsonr
的输出包含在pd.Series
中。输出为:
在朱庇特:
我可以给予你的另一个建议是调整p值以避免假阳性,因为你要重复实验几次:
我使用了here中的
p_adjust_bh
函数(答案来自@Eric Talevich)