【问题标题】:How to make first row turn into second level MultiIndex如何使第一行变成第二级MultiIndex
【发布时间】:2019-09-04 17:07:28
【问题描述】:

我有一个现有的 DataFrame,如下所示:

     1   |   1   |   1   |   2   |   2   |   2   |   2
 --------------------------------------------------------
  | abc  |  def  |  ghi  |  jkl  |  mno  |  pqr  |  stu
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00

我已经尝试了一段时间,但没有成功。

重复的一二一已经是一个一级MultiIndex。 我知道如果我添加另一个级别,它们会合并在一起,但是很难将第一行转换为 MultiIndex 的第二级。

有简单的方法吗?

想要的输出:

             1           |               2             
  | abc  |  def  |  ghi  |  jkl  |  mno  |  pqr  |  stu
 --------------------------------------------------------
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00

任何帮助将不胜感激! 谢谢

【问题讨论】:

    标签: python pandas indexing multi-index


    【解决方案1】:

    除了耶斯瑞尔的回答。这个想法是正确的,只需进行一些更改即可使其发挥作用。谢谢耶兹瑞尔。

        index = np.array([df.columns.values, df.iloc[0].values])
    
        df = pd.MultiIndex.from_arrays(index)
        df = df.iloc[1:]
    

    【讨论】:

    • 小修正.. df.columns = pd.MultiIndex.from_arrays(index)
    【解决方案2】:

    Jezrael 提出的解决方案需要一些更正:

    1. df.columnsdf.iloc[0] 应该一起第一个 from_arrays 的参数,而不是两个单独的参数。

    2. 第二级MultiIndex的来源(df.iloc[0]) 应补充 .values。否则这个 MultiIndex 级别 继承名称 (0) - 行 0 的索引值。

    3. 生成的 MultiIndex 应替换为 df.columns, 不是整个df

    所以整个解决方案应该是:

    df.columns = pd.MultiIndex.from_arrays([df.columns, df.iloc[0].values])
    df = df.iloc[1:]
    

    【讨论】:

      【解决方案3】:

      使用Tset_index

      df.T.set_index(0,append=True).T
      

      【讨论】:

        【解决方案4】:

        我认为您需要MultiIndex.from_arrays,然后通过DataFrame.iloc 使用索引过滤掉第一行:

        df = pd.MultiIndex.from_arrays(df.columns, df.iloc[0])
        df = df.iloc[1:]
        

        【讨论】:

        • 我只需要做一些更改,将发布并回答。谢谢!
        猜你喜欢
        • 2021-10-20
        • 2017-12-21
        • 2021-06-18
        • 2022-11-29
        • 2022-01-25
        • 2017-06-29
        • 1970-01-01
        相关资源
        最近更新 更多