Python Pandas数据帧在groupby agg之后有额外的标头

Python Pandas数据帧在groupby agg之后有额外的标头,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有两个数据帧,它们是50列,格式如下 ID v10 v9 GENE NM_198317 0.0 9.666823e-01 KLHL17 NM_198317 -1.0 0.000000e+00 KLHL17 我想平均基因匹配的值,所以我使用 common_mouse = common_mouse.groupby(['GENE'], as_index=False).agg([np.average])

我有两个数据帧,它们是50列,格式如下

ID             v10    v9              GENE
NM_198317      0.0    9.666823e-01    KLHL17
NM_198317      -1.0   0.000000e+00    KLHL17
我想平均基因匹配的值,所以我使用

common_mouse = common_mouse.groupby(['GENE'], as_index=False).agg([np.average])
这导致了一个表,每列有两个标题,但我只想保留旧标题

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

而不是

['v10', 'v11', 'v12']
我尝试使用
zip(*common_mouse.columns.values)
重新分配列,但似乎无法使其工作。是否有办法防止或删除列标题中的新“平均”字段?

重置索引帮助您

像这样

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)

您正在使用函数列表作为
agg
的参数。当您这样做时,您正在告诉Pandas groupby,应该为每个列计算几个聚合函数。它通过创建多索引列对象让您知道

因此,不要给它一个要聚合的函数列表。只给它一个(不在列表中)

使用标量 字符串运算符 然而,熊猫有预先编码的字符串,它已经优化了算法。平均是其中之一。改用
mean
string参数

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

     GENE  v10        v9
0  KLHL17 -0.5  0.483341
分组法 更进一步,熊猫有一个专门的分组方法

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

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

我不明白
v11
是从哪里来的。但无论如何,只要使用
common\u mouse.groupby('GENE',as\u index=False).agg('mean')
common_mouse.groupby(['GENE'], as_index=False).agg('mean')

     GENE  v10        v9
0  KLHL17 -0.5  0.483341
common_mouse.groupby(['GENE'], as_index=False).mean()

     GENE  v10        v9
0  KLHL17 -0.5  0.483341