python - Pandas 数据框在 groupby agg 之后有额外的标题

标签 python pandas pandas-groupby

我有 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/

相关文章:

python - 在文本上拆分列并将列转换为二进制类别的更有效方法

python - 比较列中的字符串并在 python 中创建相应的新列

python - 如何获取按多列分组的数据帧的第一行,并将聚合函数作为计数?

python - 仅获取 Pandas 中的一组元素

python - Django Rest 框架中的 POST 方法在 EC2 实例上返回服务器错误 500

python - SQLAlchemy:如何正确使用group_by()(only_full_group_by)?

python - 一行 if 条件赋值

python - 在 Tkinter 中捕获 "Cancel"

python - 按索引值将 pandas Series 拆分为连续的 block

python - Pandas json_normalize 产生令人困惑的 `KeyError` 消息?