首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas dataframe在groupby agg之后有额外的标头

Pandas dataframe在groupby agg之后有额外的标头
EN

Stack Overflow用户
提问于 2018-08-23 03:46:06
回答 2查看 786关注 0票数 2

我有2个数据帧,有50列,格式如下。

代码语言:javascript
复制
ID             v10    v9              GENE
NM_198317      0.0    9.666823e-01    KLHL17
NM_198317      -1.0   0.000000e+00    KLHL17

我想对基因匹配的值进行平均,所以我使用

代码语言:javascript
复制
common_mouse = common_mouse.groupby(['GENE'], as_index=False).agg([np.average])

这产生了一个表,每个列有两个标题,但我只想保留较旧的标题。

代码语言:javascript
复制
logger.info("Column headers: %s" % list(common_mouse.columns.values))

显示

代码语言:javascript
复制
[('v10', 'average'), ('v11', 'average'), ('v12', 'average')]

而不是

代码语言:javascript
复制
['v10', 'v11', 'v12']

我尝试使用zip(*common_mouse.columns.values)来重新分配列,但是我似乎无法让它工作。有没有一种方法可以防止或删除列标题中的新“average”字段?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 04:01:28

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

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

使用标量

代码语言:javascript
复制
common_mouse.groupby(['GENE'], as_index=False).agg(np.average)

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

字符串运算符

然而,Pandas有预编码的字符串,它已经针对这些字符串优化了算法。取平均值就是其中之一。请改用mean字符串参数。

代码语言:javascript
复制
common_mouse.groupby(['GENE'], as_index=False).agg('mean')

     GENE  v10        v9
0  KLHL17 -0.5  0.483341

groupby方法

此外,Pandas有一个专门的groupby方法。

代码语言:javascript
复制
common_mouse.groupby(['GENE'], as_index=False).mean()

     GENE  v10        v9
0  KLHL17 -0.5  0.483341
票数 2
EN

Stack Overflow用户

发布于 2018-08-23 03:57:00

重置索引对你有帮助吗?

像这样

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档