如何使第一行变成第二级MultiIndex

Oma*_*iri 5 python indexing multi-index pandas

我有一个现有的 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
Run Code Online (Sandbox Code Playgroud)

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

重复的 1 和 2 已经是一级 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
Run Code Online (Sandbox Code Playgroud)

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

Val*_*_Bo 5

Jezrael提出的解决方案需要进行一些修正:

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

  2. 第二级MultiIndex ( df.iloc[0] )的源应该用.values进行补充。否则,此MultiIndex级别继承 name( 0 ) - 第0行的索引值。

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

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

df.columns = pd.MultiIndex.from_arrays([df.columns, df.iloc[0].values])
df = df.iloc[1:]
Run Code Online (Sandbox Code Playgroud)