首页 > 解决方案 > 在从 DataFrame 的顶行创建的新列下对 pandas 列进行分组

问题描述

我有一个从 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 的第一行值设置为两列的列名:A然后B创建子列(就像它与 MultiIndex 的工作方式一样),这样我就有了这样的东西:

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

我觉得最简单的方法是做类似的事情,df.transpose().set_index([row0,row1]) 但这并不能消除第一行的 NaN。有没有人对此有任何想法?

标签: pythonpandasdataframemulti-index

解决方案


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

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

推荐阅读