python pandas如何计算具有相同索引值的行

时间:2017-06-18 11:10:15

标签: python pandas dataframe

我有一个名为resulttable的数据框,如下所示:

df Index        Tag        Exp. m/z    Intensity    Norm_Intensity
114             C09.xls    1013.328    10000        0.125
114             C10.xls    1013.325    20000        0.115
114             C11.xls    1013.329    30000        0.128
180             C09.xls    1257.52     11000        0.215
180             C10.xls    1257.59     12000        0.220
196             C09.xls    1647.593    13000        0.432
196             C10.xls    1647.528    14000        0.450
196             C11.xls    1647.601    31000        0.585

其中df索引值是打印结果表或导出到xls,Tag = str和Exp时的索引值。 m / z,Intensity和Norm_Intensity是float64。标签值将来自指定文件夹中的文件名,因此它们可能会有所不同。

如您所见,每个标签都包含类似的Exp。 m / z值(如1013.328,1013.325,1013.329)及其相应的强度& Norm_Intensity值。这些m / z值被认为是相同的,并且我想知道是否有办法根据df索引值对行值进行平均值,标准差,CV等计算。是否需要为计算制作另一个数据帧并不重要。

resulttable_calc = resulttable.groupby(resulttable.index)
group_result = resulttable_calc.agg({'Exp. m/z':'mean','Intensity':'mean', 'Norm_Intensity':'mean'})

似乎没有做我想要的。这样做会导致:

df Index               Exp. m/z    Intensity    Norm_Intensity
(114, 'C09.xls')       1013.328    10000        0.125
(114, 'C10.xls')       1013.325    20000        0.115
(114, 'C11.xls')       1013.329    30000        0.128
(180, 'C09.xls')       1257.52     11000        0.215
(180, 'C10.xls')       1257.59     12000        0.220
(196, 'C09.xls')       1647.593    13000        0.432
(196, 'C10.xls')       1647.528    14000        0.450
(196, 'C11.xls')       1647.601    31000        0.585

修改 print(resulttable.index)的输出是:

MultiIndex(levels[[114, 180, 196, ...........]],
           labels=[[0, 0, 0, 1, 1, 2, 2, 2, ......]],
           names=[None, 'Tag'])

我认为标签对应于每个标签。

1 个答案:

答案 0 :(得分:1)

您的索引实际上是MultiIndex。由于您已将此传递给groupby(),因此您将对MultiIndex的每个组合进行分组。我假设您希望按df Index分组 - 如果是这样,您需要在level=0进行分组。

试试这个:

resulttable_calc = resulttable.groupby(level=0)
group_result = resulttable_calc.agg({'Exp. m/z':'mean','Intensity':'mean', 'Norm_Intensity':'mean'})