我有一个包含数字和非数字数据列的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
如何将此过程同时应用于我想要的所有列并生成所有列的数据帧?对不起,如果这是重复;我发现似乎与相关主题有关的大熊猫问题都在我脑海中。
答案 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