目标
在两个数据帧之间执行两个样本t检验的组合:设置真/假上下文的布尔矩阵和值矩阵。这种组合发生在不共享索引的行之间,我想不出如何将一个df中的一个索引的掩码应用于另一个df中不匹配的索引。你知道吗
示例
虚拟数据:
cnv = {'gene': ['a','b','c'],
'cell_1': [0,-1,0],
'cell_2': [0,-1,-1],
'cell_3': [-1,0,-1],
'cell_4': [-1,0,-1],
'cell_5': [-1,0,0]
}
cnvdf = pd.DataFrame(cnv)
cnvdf.set_index('gene', inplace=True)
cnv_mask = cnvdf < 0
rna = {'gene': ['x','y','z'],
'cell_1': [1, 5, 8],
'cell_2': [8, 5, 4],
'cell_3': [8, 6, 1],
'cell_4': [1, 2, 7],
'cell_5': [5, 7, 9],
}
rnadf_all = pd.DataFrame(rna)
rnadf_all.set_index('gene', inplace=True)
以下是两个dfs:
print(rnadf)
cell_1 cell_2 cell_3 cell_4 cell_5
gene
x 1 8 8 1 5
y 5 5 6 2 7
z 8 4 1 7 9
print(cnv_mask)
cell_1 cell_2 cell_3 cell_4 cell_5
gene
a False False True True True
b True True False False False
c False True True True False
我希望实现的伪代码:
for rR in rnadf_all.iterrows():
for cR in cnv_mask.iterrows():
link = rR+"&"+cR
rnaPos = rR[<True values from cR mask applied to rR>].dropna()
rnaNeg = rR[<False values from cR mask applied to rR>].dropna()
t, p = stats.ttest_ind(rnaPos, rnaNeg)
所需产品
如果您使用提供的答案运行上面的伪代码,并为每个迭代打印link
和rnaPos
和rnaNeg
值,那么这就是理想情况:
link rnaPos rnaNeg
x&a [8,1,5] [1,8]
x&b [1,8] [8,1,5]
x&c [8,8,1] [1,5]
y&a [6,2,7] [5,5]
y&b [5,5] [6,2,7]
...
...
...
z&c [4,1,7] [8,9]
以上是我正在寻找的模式。例如:z&c
,将来自cnv_mask
行c
的掩码应用于rnadf_all
行z
,创建True
值[4,1,7]
,以及False
值[8,9]
。因此,应用程序不是通过dfs之间的索引来匹配掩码,而是通过列对齐来匹配掩码。我该怎么做?你知道吗
你知道吗itertools.产品提供所有可能的产品。对于它们中的每一个,
rnadf_all.loc[pr[0]][cnv_mask.loc[pr[1]]].tolist()
转到rnadf_all
中相应的行,并根据cnv_mask
中相应行的真值对其进行切片。对于假值,只需要在cnv_mask
前面加一个波浪号。你知道吗相关问题 更多 >
编程相关推荐