繁体   English   中英

如何使第一行变成二级MultiIndex

[英]How to make first row turn into second level MultiIndex

我有一个现有的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

任何帮助将非常感谢! 谢谢

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

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

使用Tset_index

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

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

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

  2. 第二级MultiIndexdf.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:]

除了jezrael的回答。 这个想法是正确的,只是做了一些改变才能使它发挥作用。 谢谢jezrael。

    index = np.array([df.columns.values, df.iloc[0].values])

    df = pd.MultiIndex.from_arrays(index)
    df = df.iloc[1:]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM