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

2024-04-26 14:48:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧是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', 'average'), ('v11', 'average'), ('v12', 'average')]

而不是

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

我试图使用zip(*common_mouse.columns.values)来重新分配列,但似乎无法让它工作。有没有办法阻止或从列标题中删除新的“average”字段?你知道吗


Tags: columns数据id标题格式commonvaluesaverage
2条回答

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

所以不要给它一个要聚合的函数列表。只给一个(不在列表中)。你知道吗

使用标量

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方法

更进一步说,熊猫有专门的groupby方法。你知道吗

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

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

重置索引有什么帮助吗?你知道吗

像这样

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)

相关问题 更多 >