当第三列满足某些条件时,我正在尝试找到一种方法来获取数据框中两列之间的人员相关性和 p 值。
df =
桶ID | 强度 | BW25113 |
---|---|---|
825.326 | 3459870 | 0.5 |
825.326 | 8923429 | 0.95 |
734.321 | 12124 | 0.4 |
734.321 | 2387499 | 0.3 |
我最初尝试了一些 pd.Series.corr()
非常快的功能,并按照我想要的方式获得最终输出:
bio1 = df.columns[1:].tolist()
pcorrs2 = [s + '_Corr' for s in bio1]
coldict2 = dict(zip(bios,pcorrs2))
coldict2
df2 = df.groupby('BucketID')[bio1].corr(method = 'pearson').unstack()['Intensity'].reset_index().rename(columns = coldict2)
df3 = pd.melt(df2, id_vars = 'BucketID', var_name = 'Org', value_name = 'correlation')
df3['Org'] = df3.Org.apply(lambda x: x.rstrip('_corr'))
df3
然后,这给了我(大部分)想要的表:
桶ID | 组织 | 相关性 |
---|---|---|
734.321 | 强度 | 1.0 |
825.326 | 强度 | 1.0 |
734.321 | BW25113 | -1.0 |
825.326 | BW25113 | 1.0 |
这适用于给我个人相关性,但不是 p 值,这将有助于确定相关性的相关性。
有没有办法以这种方式获得与相关联的 p 值,pd.Series.corr()
或者某个版本的scipy.stats.pearsonr
迭代每个 BucketID 的数据帧会更有效?我尝试了这种口味的东西,但速度非常慢(几十分钟而不是几秒钟)。
提前感谢您的帮助和/或评论。