gpt4 book ai didi

python - 按组将函数应用于 Pandas 数据框中的每一行

转载 作者:行者123 更新时间:2023-12-03 13:38:58 24 4
gpt4 key购买 nike

我建了一个 Pandas数据框(下面的示例)由基因名称索引,其中列的样本名称和整数作为单元格值。我想要做的是运行方差分析( f_oneway() ,来自 scipy.stats )用于由与样本组对应的列列表定义的行值列表。然后这些结果将存储在一个新的 Pandas 中。以组名作为列和相同基因作为索引的数据框。
数据帧的一个例子(它是从 my 中的另一个函数返回的):

import pandas as pd
counts = {'sample1' : [0, 1, 5, 0, 10],
'sample2' : [2, 0, 10, 0, 0],
'sample3' : [0, 0, 0, 1, 0],
'sample4' : [10, 0, 1, 4, 0]}
data = pd.DataFrame(counts, columns = ['sample1', 'sample2', 'sample3', 'sample4'],
index = ['gene1', 'gene2', 'gene3', 'gene4', 'gene5'])
组由 main() 作为参数导入,所以在这个函数中我有:
def compare(out_prefix, pops, data):
import scipy.stats as stats
sig = pd.DataFrame(index=data.index)

#groups will look like:
#groups = [['sample1', 'sample2'],['sample3', 'sample4']]

for group in groups:
with open(group) as infile:
groups_s = []
for spl in infile:
group_s.append(spl.replace("\n",""))

mean_col = pop.split(".")[0]+"_mean"
std_col = pop.split(".")[0]+"_std"
stat_col = pop.split(".")[0]+"_stat"
p_col = pop.split(".")[0]+"_sig"

sig[mean_col] = data[group_s].mean(axis=1)
sig[std_col] = data[group_s].std(axis=1)

sig[[stat_col, p_col]] = data.apply(lambda row : stats.f_oneway(data.loc[group_s].values.tolist()))
最后一行不起作用,我无法通过最近几天的谷歌搜索来了解它是如何完成的 - 有人可以指出我正确的方向吗?
理想情况下,它会将每组样本的每行 ANOVA 检验结果(功效、显着性)写入列 stat_colp_colsig .对于gene1,它将为stats.f_oneway 提供每个组中样本的值列表列表,例如 [[0,2],[0, 10]] .
提前致谢!

最佳答案

尝试这个:

group = ['sample1', 'sample2']
在您的 sample 上:
data[group].T
看起来喜欢:
    gene1   gene2   gene3   gene4   gene5
sample1 0 1 5 0 10
sample2 2 0 10 0 0
最后:
anova = stats.f_oneway(*data[group].T.values)
print(anova.statistic, anova.pvalue)
anova对象包含您期望的内容:
0.0853333333333 0.777628169862

关于python - 按组将函数应用于 Pandas 数据框中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com