我构建了一个Pandas由基因名称索引的数据框(下面的示例),其中包含列和整数的样本名称作为单元格值。我想要做的是对由与样本组对应的列列表定义的行值列表运行 ANOVA ( f_oneway(), from 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'])
Run Code Online (Sandbox Code Playgroud)
组作为参数导入main(),所以在这个函数中我有:
def compare(out_prefix, pops, data):
import scipy.stats as stats
sig = pd.DataFrame(index=data.index)
#groups …Run Code Online (Sandbox Code Playgroud) 我只需要交换此表中的每两行...基本上将包含'chao1'的每一行与下一行交换,其中包含'obs'.
我所遇到的所有例子似乎都有一个先前的参考,但我认为,我想要的是有点不同.
Group.1 var S se
1 Cliona celata complex chao1 800.5933 57.51779
2 Cliona celata complex obs 495.4286 63.07360
3 Cliona viridis chao1 432.5548 35.87778
4 Cliona viridis obs 286.0000 55.32179
5 Dysidea fragilis chao1 694.9129 74.85536
6 Dysidea fragilis obs 357.6667 64.02170
7 Phorbas fictitius chao1 851.6950 57.67145
8 Phorbas fictitius obs 523.2500 23.57905
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助!
干杯,
安德烈
我试图从我生成的表格中绘制分组条形图,如下所示.
Group.1 S.obs se.obs S.chao1 se.chao1
Cliona celata complex 499.7143 59.32867 850.6860 65.16366
Cliona viridis 285.5000 51.68736 462.5465 45.57289
Dysidea fragilis 358.6667 61.03096 701.7499 73.82693
Phorbas fictitius 525.9167 24.66763 853.3261 57.73494
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了以下但没有取得好成绩:
library(dplyr)
library(tidyr)
library(ggplot2)
data.frame(t(agg_media)) %>%
add_rownames() %>%
gather(group, value, - c(rowname, se.chao1)) -> media_2
gather(group, value, - c(rowname, se.obs)) -> media_3
#take out error bars from S.obs
# mutate(media2, se.chao1 = replace(se.chao1, which(group == "S.obs"),NA)) -> media3
dodge <- position_dodge(width=0.9)
g <- ggplot(data = agg_media, aes(x = rowname, …Run Code Online (Sandbox Code Playgroud)