【问题标题】:After groupby, how to flatten column headers?groupby之后,如何展平列标题?
【发布时间】:2016-01-05 09:55:30
【问题描述】:

我试图在单个 Id 列上加入多个熊猫数据框,但是当我尝试合并时收到警告:

KeyError:'Id'。

认为这可能是因为我的数据框有由groupby 语句产生的偏移列,但我很可能是错的。无论哪种方式,我都无法弄清楚如何“取消堆叠”我的数据框列标题。 this question 的答案似乎都不起作用。

我的groupby 代码:

step1 = pd.DataFrame(step3.groupby(['Id', 'interestingtabsplittest2__grp'])['applications'].sum())
step1.sort('applications', ascending=False).head(3)

返回:

如何将这些偏移标头放入顶层?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您正在寻找.reset_index()

    In [11]: df = pd.DataFrame([[2, 3], [5, 6]], pd.Index([1, 4], name="A"), columns=["B", "C"])
    
    In [12]: df
    Out[12]:
       B  C
    A
    1  2  3
    4  5  6
    
    In [13]: df.reset_index()
    Out[13]:
       A  B  C
    0  1  2  3
    1  4  5  6
    

    注意:你可以在 groupby 时使用as_index=False 来避免这一步。

    step1 = step3.groupby(['Id', 'interestingtabsplittest2__grp'], as_index=False)['applications'].sum()
    

    【讨论】:

    • 如果你在组尾实现了 agg 函数。 as_index 无法展平列组。我从这个link 中找到了答案。希望它对像我这样的人有所帮助。
    • 对我有用的解决方案是df.reset_index(drop=True, inplace=True) drop=True 是关键部分。
    【解决方案2】:

    如果您使用 .agg() 进行多次聚合或按多列分组,则接受的答案不起作用

    您可以改为删除最顶层,然后重置索引。

    df.droplevel(axis=1, level=0).reset_index()
    

    在这里,我只删除了一个级别,但您也可以传递一个数组:

    df.droplevel(axis=1, level=[0,1]).reset_index()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-02
      • 2021-03-06
      • 2018-08-14
      • 2020-12-16
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多