python - Pandas 表 - 将多索引转换为单索引
问题描述
我正在尝试重组一个表格,现在它大致具有所需的格式。
我最终得到了一个多索引表,我想将其转换为单表并具有以下列
| | 'SourceID' | 'P1_VAL_1' | 'P2_VAL_1' | 'P3_VAL_1' | 'P4_VAL_1' | 'P1_VAL_2' | 'P2_VAL_2' | 'P3_VAL_2' | 'P4_VAL_2' |
我不知道如何组合索引级别?
例子:import pandas as pd
d = {'SourceID': [1, 1, 1, 1, 2, 2, 2],
'FieldName': ["P1", "P2", "P3", "P4", "P1", "P2", "P3"],
'VAL_1': [100, 200, 300, 400 , 500, 600, 700],
'VAL_2': [1000, 2000, 3000, 4000, 5000, 6000, 7000],}
df = pd.DataFrame(data=d)
gby_temp = df.groupby(['SourceID', 'FieldName']).mean().unstack('FieldName')
L = [(a, f'{b}_{a}') for a, b in gby_temp.columns]
gby_temp.columns = pd.MultiIndex.from_tuples(L)
gby_temp = gby_temp.reset_index()
gby_temp.set_index('SourceID')
gby_temp = gby_temp.reindex(sorted(gby_temp.columns), axis=1)
display(gby_temp)
电流输出
| | ('SourceID', '') | ('VAL_1', 'P1_VAL_1') | ('VAL_1', 'P2_VAL_1') | ('VAL_1', 'P3_VAL_1') | ('VAL_1', 'P4_VAL_1') | ('VAL_2', 'P1_VAL_2') | ('VAL_2', 'P2_VAL_2') | ('VAL_2', 'P3_VAL_2') | ('VAL_2', 'P4_VAL_2') |
|---:|-------------------:|------------------------:|------------------------:|------------------------:|------------------------:|------------------------:|------------------------:|------------------------:|------------------------:|
| 0 | 1 | 100 | 200 | 300 | 400 | 1000 | 2000 | 3000 | 4000 |
| 1 | 2 | 500 | 600 | 700 | nan | 5000 | 6000 | 7000 | nan |
原始表
| | SourceID | FieldName | VAL_1 | VAL_2 |
| ---- | -------- | --------- | ----- | ----- |
| 0 | 1 | P1 | 100 | 1000 |
| 1 | 1 | P2 | 200 | 2000 |
| 2 | 1 | P3 | 300 | 3000 |
| 3 | 1 | P4 | 400 | 4000 |
| 4 | 2 | P1 | 500 | 5000 |
| 5 | 2 | P2 | 600 | 6000 |
| 6 | 2 | P3 | 700 | 7000 |
解决方案
我认为您的解决方案应该简化,因为不需要 new MultiIndex
,而是在之后加入列名的值unstack
:
gby_temp = df.groupby(['SourceID', 'FieldName']).mean().unstack('FieldName')
gby_temp.columns = [f'{b}_{a}' for a, b in gby_temp.columns]
gby_temp = gby_temp.reset_index()
print(gby_temp)
SourceID P1_VAL_1 P2_VAL_1 P3_VAL_1 P4_VAL_1 P1_VAL_2 P2_VAL_2 \
0 1 100.0 200.0 300.0 400.0 1000.0 2000.0
1 2 500.0 600.0 700.0 NaN 5000.0 6000.0
P3_VAL_2 P4_VAL_2
0 3000.0 4000.0
1 7000.0 NaN
推荐阅读
- java - 反应式 - 改进 Mono 语法
- css - CSS制作表格有可移动的列
- r - 将环境中的 data.frame 对象附加到 R 中 GlobalEnv(或另一个环境)中的相应 data.frame 对象
- javascript - 在 preventDefault 不做默认值之后点击
- node.js - 创建模型后是否可以创建一个新的钩子?
- sqlite - 创建不允许不在另一列中的值的触发器
- r - R plm vs fixst 包 - 不同的结果?
- c# - 用 C# 编写的 ASP.NET MVC 5 Web 应用程序中的视频通话开发
- docker - 如何使用 Dockerfile 在一层中复制或添加多个文件和目录
- html - 如何在jQuery中使右侧边栏变粘?