我有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)
来重新分配列,但似乎无法正常工作。有没有办法阻止或删除列标题中的新“平均”字段?
答案 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
甚至,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)