我有一个名为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'])
我认为标签对应于每个标签。
答案 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'})