从DataFrame的顶行创建的新列下对熊猫列进行分组

时间:2020-10-27 20:35:38

标签: python pandas dataframe multi-index

我有一个从excel文件中读取的数据帧,如下所示:

     |Unnamed: 0 |Unnamed: 1 |Unnamed: 3 | Unnamed: 4|
     |-----------|-----------|-----------|-----------|
row0 |A          |NaN        |B          |NaN        |
row1 |Option 1   |Option 2   |Option 3   |Option 4   |
row2 |data       |data       |data       |data       |
.
.
.

我想将非NaN第一行值设置为两列的列名:AB,然后创建子列(例如它如何与MultiIndex一起使用),以便像这样的东西:

     |           A           |           B           |
     |-----------|-----------|-----------|-----------|
     |Option 1   |Option 2   |Option 3   |Option 4   |
     |-----------|-----------|-----------|-----------|
row0 |data       |data       |data       |data       |
.
.
.

我觉得最简单的方法是执行类似df.transpose().set_index([row0,row1]) 的操作,但这并不能摆脱第一行中的NaN。有人对此有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用正向填充来处理NaN,然后根据前两行将其从元组中转换为多索引。

tuples = list(zip(df.loc['row0',:].fillna(method='ffill'), df.loc['row1',:]))
df = df.loc['row2',:]
df.index = pd.MultiIndex.from_tuples(tuples)

#df
      0    1  2    3
row0  A  NaN  B  NaN
row1  a    b  c    d
row2  1    2  3    4

#df with multiIndex
A  a    1
   b    2
B  c    3
   d    4
Name: row2, dtype: object