我有一个从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。有人对此有任何想法吗?
答案 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