python - 在从 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。有没有人对此有任何想法?
解决方案
您可以使用前向填充来处理NaN
s,然后根据前两行将其从元组中变为多索引。
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
推荐阅读
- tabulator - 在制表器中为可以接受多个值的选项字段创建标题过滤器
- docker - Docker ee ucp 问题 - 重新启动节点后遇到以下错误,并且 ucp 控制器显示不健康状态
- javascript - 在 JavaScript 中直接使用对象名称(而不是 this 关键字)有什么缺点吗?
- arduino - Arduino按钮控制VB6形状填充颜色
- java - 使 JScrollPane 中 JList 单元格渲染器中的 JTextArea 调整大小以滚动视图宽度、内容高度
- formula - 为什么 if 条件现在与 now() 一起使用
- algorithm - 生成所有可能组合的分类和复杂性:P、NP、NP-Complete 或 NP-Hard
- java - Java - 仅在尚未转义时转义双引号
- flutter - Flutter 按主题更改颜色
- haskell - Haskell IO 递归(带二叉树)