熊猫基于手段建立子表

时间:2014-07-09 19:24:24

标签: python pandas dataframe ipython-notebook

我有一个包含数字和非数字数据列的DataFrame。这是它的一部分:

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

我想通过癌症阶段对数据进行分组,取每个数值数据列的平均值,并生成一个表格,列出每个癌症阶段的方法;像这样:

Cancer Stage    ATG12 Mean    ATG5 Mean    ATG7 Mean
IIA             5.03          6.20         8.34
IIB             7.45          4.22         7.99
IIIA            5.32          3.85         6.68

我已经找到了groupby和mean()函数,可以一次计算一列的均值:

AVG = data.groupby("Cancer Stage")['ATG12 Norm'].mean()

但那只能给我:

Cancer Stage    
IIA             5.03      
IIB             7.45
IIIA            5.32
Name: ATG12 Norm, dtype: float64

如何将此过程同时应用于我想要的所有列并生成所有列的数据帧?对不起,如果这是重复;我发现似乎与相关主题有关的大熊猫问题都在我脑海中。

1 个答案:

答案 0 :(得分:1)

你试过吗

df.groupby('Cancer Stage').mean()

df.groupby('Cancer Stage')['ATG12 Norm','ATG5 Norm'].mean()

带有额外文本列的示例数据:

import pandas as pd
from StringIO import StringIO

data='''ATG12 Norm     ATG5 Norm    ATG7 Norm    Cancer Stage    Text
5.55           4.99         8.99         IIA    ABC
4.87           5.77         8.88         IIA    ABC
5.98           7.88         8.34         IIC    ABC'''

df = pd.DataFrame.from_csv(StringIO(data), index_col=None, sep='\s{2,}')

print df
print df.groupby('Cancer Stage')['ATG12 Norm','ATG5 Norm'].mean()
print df.groupby('Cancer Stage').mean()

结果:

   ATG12 Norm  ATG5 Norm  ATG7 Norm Cancer Stage Text
0        5.55       4.99       8.99          IIA  ABC
1        4.87       5.77       8.88          IIA  ABC
2        5.98       7.88       8.34          IIC  ABC


              ATG12 Norm  ATG5 Norm
Cancer Stage                       
IIA                 5.21       5.38
IIC                 5.98       7.88


              ATG12 Norm  ATG5 Norm  ATG7 Norm
Cancer Stage                                  
IIA                 5.21       5.38      8.935
IIC                 5.98       7.88      8.340