我有 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)
来重新分配列,但我似乎无法让它工作。有没有办法阻止或删除列标题中的新“平均”字段?
最佳答案
您正在使用函数列表作为 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
分组方法
更进一步,Pandas 有一个专用的 groupby 方法。
common_mouse.groupby(['GENE'], as_index=False).mean()
GENE v10 v9
0 KLHL17 -0.5 0.483341
关于python - Pandas 数据框在 groupby agg 之后有额外的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51974106/