Pandas 根据均值构建子表
我有一个数据表,里面有数字和非数字的数据列。这里是它的一部分:
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
我该如何一次性对所有想要的列应用这个过程,并生成一个包含所有结果的数据表呢?抱歉如果这个问题重复了;我找到的关于pandas的相关问题都让我感到困惑。
1 个回答
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