【发布时间】:2021-01-15 23:15:46
【问题描述】:
我正在尝试从数据框中的四列中找出使用 Fisher 精确检验创建 p 值的最佳方法。我已经提取了列联表的四个部分,'a' 是左上角,'b' 是右上角,'c' 是左下角,'d' 是右下角。我已经开始通过简单的 pandas 计算来包含额外的计算列,但如果有更简单的方法来使用 4 个初始列,则这些不是必需的。当包括一个额外的集合(x.type = high)时,我有超过 100 万行,所以想使用一种有效的方法。到目前为止,这是我的代码:
import pandas as pd
import glob
import math
path = r'directory_path'
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
frame['a+b'] = frame['a'] + frame['b']
frame['c+d'] = frame['c'] + frame['d']
frame['a+c'] = frame['a'] + frame['c']
frame['b+d'] = frame['b'] + frame['d']
作为此数据的示例,“框架”当前显示:
ID(n) a b c d i x.name x.type a+b c+d a+c b+d
0 1258065 5 28 31 1690 1754 Albumin low 33 1721 36 1718
1 1132105 4 19 32 1699 1754 Albumin low 23 1731 36 1718
2 898621 4 30 32 1688 1754 Albumin low 34 1720 36 1718
3 573158 4 30 32 1688 1754 Albumin low 34 1720 36 1718
4 572975 4 23 32 1695 1754 Albumin low 27 1727 36 1718
... ... ... ... ... ... ... ... ... ... ... ... ...
666646 12435 1 0 27 1726 1754 WHR low 1 1753 28 1726
666647 15119 1 0 27 1726 1754 WHR low 1 1753 28 1726
666648 17053 1 2 27 1724 1754 WHR low 3 1751 28 1726
666649 24765 1 3 27 1723 1754 WHR low 4 1750 28 1726
666650 8733 1 1 27 1725 1754 WHR low 2 1752 28 1726
是将这些转换为 numpy 数组并通过迭代处理它的最佳方法,还是将其保存在 pandas 中?我假设我不能在数据框中使用数学函数(我试过math.comb(),它在数据框中不起作用)。我也尝试过使用 pyranges 作为它的 Fisher 方法,但它似乎不适用于我的环境(python 3.8)。
任何帮助将不胜感激!
【问题讨论】:
标签: python python-3.x pandas statistics combinations