【问题标题】:Pandas DataFrame.reset_index for columns [duplicate]列的 Pandas DataFrame.reset_index [重复]
【发布时间】:2013-10-20 06:48:58
【问题描述】:

列标题是否有 reset_index 等效项?换句话说,如果列名是MultiIndex,我将如何删除其中一个级别?

【问题讨论】:

  • 删除一列,还是移入索引(作为一行)?除了包装在 .T... 之外,我认为没有真正干净的方式来移动索引
  • 这个想法是将列名的 MultiIndex 的给定级别作为新行移动到 DataFrame 中(或者选择完全删除它)。
  • 也许一个更简单的问题是我如何简单地在列名中删除一个层次结构?

标签: python pandas


【解决方案1】:

这是一种将列转换为元组的非常愚蠢的方法:

df.columns = list(df.columns)

你可以在此基础上得到你想要的任何东西,例如,如果你有一个 2 级 MultiIndex,要删除最外层,你可以这样做:

df.columns = [col[1] for col in df.columns]

您不能对迭代进行花哨的索引,因为它会生成元组,但您可以执行以下操作:

df.columns = MultiIndex.from_tuples([col[1:] for col in df.columns])

所以你有一些选择。

【讨论】:

    【解决方案2】:

    回答第二个问题:

    df.columns = df.columns.droplevel(level)
    

    第一个问题正如@AndyHayden 指出的那样,并不是那么直截了当。仅当您的列名与列值的类型相同时才有意义。

    【讨论】:

      【解决方案3】:

      转置df,重置索引,再次转置。

      df.T.reset_index().T

      【讨论】:

      • 您实际上需要df.T.reset_index(drop=True).T 来防止名称被重新插入为常规列。
      • 另外,对于大型数据帧,我怀疑这会占用大量内存。想知道这是否可以避免......
      • 正如@smci 指出的那样,您需要放弃。这会让你失去列的名称,从而破坏数据框。
      猜你喜欢
      • 2012-08-25
      • 2019-11-26
      • 2021-07-04
      • 2014-07-08
      • 1970-01-01
      • 2013-02-05
      • 2017-03-13
      • 2021-12-17
      • 2018-09-06
      相关资源
      最近更新 更多