python 中两个数据帧之间的 Wilcoxon 秩和检验

Wilcoxon rank sum test between two data frames in python

我正在尝试在两个数据帧之间执行 Wilcoxon 秩和检验。我只想在行之间执行测试。例如,测试只能在 df1 (A, 1, 2, 3) 和 df2 (A ,10, 12 ,13) 中的第 1 行、df1 (B ,4, 5, 6) 和 df2 中的第 2 行之间进行(B ,14, 15, 16),等等。

df1=pd.DataFrame(np.array([['A',1, 2, 3], ['B',4, 5, 6], ['C',7, 8, 9]]),
                   columns=['Details','a', 'b', 'c'])

 
df2=pd.DataFrame(np.array([['A',10, 12, 13], ['B',14, 15, 16], ['C',17, 18, 19]]),
                   columns=['Details','a', 'b', 'c'])

这应该会引导我在数据框的行之间进行测试的 p 值列。

out = pd.DataFrame(np.array([['A',0.05], ['B',0.0002], ['C',1]]),
                   columns=['details','P'])

一种方法是应用 for 循环,但不幸的是,我的原始数据集中有 28000 行,这个实验必须重复至少 1000 次。我想知道是否有人有更好的策略来解决这个问题。非常感谢您的提前帮助。

一种计算方法是使用 scipy

的秩和
from scipy.stats import ranksums
import pandas as pd


df1=pd.DataFrame(np.array([['A',1, 2, 3], ['B',4, 5, 6], ['C',7, 8, 9]]),
                   columns=['Details','a', 'b', 'c'])

 
df2=pd.DataFrame(np.array([['A',10, 12, 13], ['B',14, 15, 16], ['C',17, 18, 19]]),
                   columns=['Details','a', 'b', 'c'])


a = df1.loc[0,'a':].values.astype(int) #Select the first row
b = df2.loc[0,'a':].values.astype(int) #Select the second row

ranksums(a, b)