熊猫数据框在groupby agg之后具有附加头

时间:2018-08-22 19:46:06

标签: python pandas pandas-groupby

我有2个数据框,它们是50列,格式如下。

ID             v10    v9              GENE
NM_198317      0.0    9.666823e-01    KLHL17
NM_198317      -1.0   0.000000e+00    KLHL17

我想对GENE匹配的值取平均值,所以我使用了

common_mouse = common_mouse.groupby(['GENE'], as_index=False).agg([np.average])

这导致一个表中的每一列都有两个标题,但是我只想保留较旧的标题。

logger.info("Column headers: %s" % list(common_mouse.columns.values))

显示

[('v10', 'average'), ('v11', 'average'), ('v12', 'average')]

而不是

['v10', 'v11', 'v12']

我尝试使用zip(*common_mouse.columns.values)来重新分配列,但似乎无法正常工作。有没有办法阻止或删除列标题中的新“平均”字段?

2 个答案:

答案 0 :(得分:2)

您正在使用函数列表作为agg的参数。当您执行此操作时,您是在告诉Pandas groupby,应该为每列计算几个聚合函数。通过创建MultiIndex列对象可以让您知道。

所以不要给它列出要汇总的功能。只给它一个(不在列表中)。

使用标量

common_mouse.groupby(['GENE'], as_index=False).agg(np.average)

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

字符串运算符

但是,Pandas已对其进行了优化算法的字符串进行了预编码。平均是其中之一。请改用mean字符串参数。

common_mouse.groupby(['GENE'], as_index=False).agg('mean')

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

groupby方法

甚至,Pandas对此都有专门的分组方法。

common_mouse.groupby(['GENE'], as_index=False).mean()

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

答案 1 :(得分:0)

重置索引对您有帮助吗?

import pandas as pd
import numpy as np
vetor = pd.DataFrame({'ID':['NM_198317','NM_198317'], 'v10':[0.0, -1.0], 'v9':[9.666823e-01, 0.000000e+00], 'GENE':['KLHL17', 'KLHL17']})


common_mouse = vetor.groupby(['GENE']).agg([np.average]).reset_index()

print(common_mouse)