Pandas, compute many means with bootstrap confidence intervals for plotting
我想为数据帧的某些子集计算具有自举置信区间的均值;最终目标是生成带有自举置信区间作为误差条的均值的条形图。我的数据框如下所示:
1 2 3 4 | ATG12 Norm ATG5 Norm ATG7 Norm Cancer Stage 5.55 4.99 8.99 IIA 4.87 5.77 8.88 IIA 5.98 7.88 8.34 IIC |
我感兴趣的子集是Norm专栏和癌症分期的每种组合。我设法使用以下方法生成了均值表:
1 | df.groupby('Cancer Stage')['ATG12 Norm', 'ATG5 Norm', 'ATG7 Norm'].mean() |
但是我需要使用此处描述的方法来计算引导程序置信区间,以将其用作每种方法的误差线:http://www.randalolson.com/2012/08/06/statistical-analysis-made-easy -在python /
归结为:
1 2 3 4 | import scipy import scikits.bootstraps as bootstraps CI = bootstrap.ci(data=Series, statfunction=scipy.mean) # CI[0] and CI[1] are your low and high confidence intervals |
我尝试使用嵌套循环脚本将此方法应用于数据的每个子集:
1 2 3 4 5 6 | for i in data.groupby('Cancer Stage'): for p in i.columns[1:3]: # PROBLEM!! Series = i[p] print p print Series.mean() ci = bootstrap.ci(data=Series, statfunction=scipy.mean) |
哪个产生了错误消息
1 | AttributeError: 'tuple' object has no attribute called 'columns' |
我不知道什么是"元组",我需要做一些阅读工作,但是我担心我目前嵌套的for循环方法会给我留下我无法轻易绘制的某种数据结构。我是Pandas的新手,所以发现有一种更简单,更轻松的方法来生成我要绘制的数据,我不会感到惊讶。任何帮助都将不胜感激。
您遍历groupby对象的方式是错误的!当使用groupby()时,数据框将沿着groupby列中的值以及这些值作为组名进行切片,从而形成所谓的"元组":
1 2 3 4 | for name, group in data.groupby('Cancer Stage'): print name for p in group.columns[0:3]: ... |
请在此处阅读有关pandas的groupby功能的更多信息,并通过python-reference来了解什么是元组!
使用pandas的
1 2 3 | cols=data.columns[0:2] for col in columns: print data.groupby('Cancer Stage')[col].apply(lambda x:bootstrap.ci(data=x, statfunction=scipy.mean)) |
只需一行即可完成您需要的一切,并为您生成一个(很容易绘制的)系列
编辑:
我玩弄了自己创建的数据框对象:
1 2 3 | df = pd.DataFrame({'A':range(24), 'B':list('aabb') * 6, 'C':range(15,39)}) for col in ['A', 'C']: print df.groupby('B')[col].apply(lambda x:bootstrap.ci(data=x.values)) |
产生两个看起来像这样的系列:
1 2 3 4 5 6 7 | B a [6.58333333333, 14.3333333333] b [8.5, 16.25] B a [21.5833333333, 29.3333333333] b [23.4166666667, 31.25] |