【问题标题】:Pandas rename multilevel looking column names [duplicate]熊猫重命名多级查找列名[重复]
【发布时间】:2020-05-03 19:00:17
【问题描述】:

我有一个数据框,其列名已更改为

MultiIndex([(     'ID',       ''),
            ('Probability',   'mean'),
            ('Probability', 'median'),
            ('Uncertainty',   'mean'),
            ('Uncertainty', 'median')],
          )

因为我做到了

data[data["ID"].notnull()].groupby(["ID"]).agg({"Probability":["mean", "median"], "Uncertainty":["mean", "median"]}).reset_index()

我想将列名重命名为:

["ID", "Probability_mean", "Probability_median", "Uncertainty_mean", "Uncertainty_median"]

我可以单独重命名每个原始列名,但不能一起重命名它们。我还尝试扁平化数据框,因为我认为它是多索引或多级。虽然看起来如此,但它不是一个。大多数多索引功能不适用于它。有没有办法重命名这些列?我错过了什么吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果使用pd.__version__ > 0.25.0,您可以使用NamedAggs 创建字典。

    reset_index 之前,您可以使用str.join 在groupby 之后折叠MultiIndex。然后reset_index。这避免了'ID' 的问题。另外,不需要删除空组键,因为groupby 默认会忽略这些。

    样本数据

    import pandas as pd
    import numpy as np
    N = 6
    df = pd.DataFrame({'ID': np.arange(N)//2, 
                       'Probability': np.random.normal(0,1,N),
                       'Uncertainty': np.random.normal(0,1,N)})
    agg_d = {'Probability': ['mean', 'median'], 'Uncertainty': ['mean', 'median']}
    

    代码:

    >= 0.25.0

    d = {f'{k}_{x}': pd.NamedAgg(column=k, aggfunc=x) for k,v in agg_d.items() for x in v}
    df.groupby('ID').agg(**d).reset_index()
    

    res = df.groupby('ID').agg(agg_d)
    res.columns = ['_'.join(tup) for tup in res.columns]
    res = res.reset_index()
    

    输出:

       ID  Probability_mean  Probability_median  Uncertainty_mean  Uncertainty_median
    0   0          0.795119            0.795119          0.466417            0.466417
    1   1          0.150184            0.150184         -0.132942           -0.132942
    2   2          1.250202            1.250202         -0.102760           -0.102760
    

    【讨论】:

    • 哇!两种解决方案都有效!非常感谢!
    • 好的,我回来只是想告诉你我喜欢你的 NamedAgg 解决方案!再次感谢!
    猜你喜欢
    • 2021-08-15
    • 2019-05-25
    • 2022-11-21
    • 2020-09-04
    • 1970-01-01
    • 2020-03-24
    • 2017-10-01
    • 2017-12-19
    相关资源
    最近更新 更多