更优雅地计算 Pandas 中列差异的 z 分数
More elegant computation of zscore of column differences in Pandas
我有一个 n x m
DataFrame,用于量化 m
区域中 n
基因的表达。我想计算所有区域对之间差异表达的基因数量。
Area Area
Gene A B C Area A B C
a A
b --> B x
c C
在上面的草图中,x 表示区域 A
和 B
共有的基因数量,这些基因在区域 B
中富集。 我需要计算所有成对列差异的 zscore。
当前方法
def compare(one,two):
column_one_header,column_one_data = one
column_two_header,column_two_data = two
zscores = zscore(column_one_data-column_two_data)
return len(zscores[zscores>threshold])
heatmap = [[compare(column_one,column_two)
for column_one in df.iteritems()]
for column_two in df.iteritems()]
This question 表明有一种更简单、更快速的方法可以做到这一点。与那个问题相反,我想做多个操作。我不确定如何为我的问题编写类似的单行代码。
df = pd.DataFrame(random_integers(0,100,(3,3)),columns=list('ABC'),index=list('abc'))
differ = reshape([sum(df[col2]-df[col]) for col2 in df for col in df], (3,3))
differ = pd.DataFrame(differ, columns=list('ABC'),index=list('ABC'))
differ
您仍然可以在调用 sum(a-b) 的地方使用您自己的函数。请注意,我们让 Pandas 处理按顺序应用函数,这通常更优雅。
我有一个 n x m
DataFrame,用于量化 m
区域中 n
基因的表达。我想计算所有区域对之间差异表达的基因数量。
Area Area
Gene A B C Area A B C
a A
b --> B x
c C
在上面的草图中,x 表示区域 A
和 B
共有的基因数量,这些基因在区域 B
中富集。 我需要计算所有成对列差异的 zscore。
当前方法
def compare(one,two):
column_one_header,column_one_data = one
column_two_header,column_two_data = two
zscores = zscore(column_one_data-column_two_data)
return len(zscores[zscores>threshold])
heatmap = [[compare(column_one,column_two)
for column_one in df.iteritems()]
for column_two in df.iteritems()]
This question 表明有一种更简单、更快速的方法可以做到这一点。与那个问题相反,我想做多个操作。我不确定如何为我的问题编写类似的单行代码。
df = pd.DataFrame(random_integers(0,100,(3,3)),columns=list('ABC'),index=list('abc'))
differ = reshape([sum(df[col2]-df[col]) for col2 in df for col in df], (3,3))
differ = pd.DataFrame(differ, columns=list('ABC'),index=list('ABC'))
differ
您仍然可以在调用 sum(a-b) 的地方使用您自己的函数。请注意,我们让 Pandas 处理按顺序应用函数,这通常更优雅。