Python 熊猫表-将多索引转换为单索引
我正在尝试重新构造一个表,现在它的格式大致符合要求 我最终得到了一个多索引表,我想将其转换为单索引,并有以下列Python 熊猫表-将多索引转换为单索引,python,pandas,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' | 我不知道如何组合索引级别 例子: 将熊猫作为pd导入 d={'SourceID':[1,1,1,2,2,
| | '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' |
我不知道如何组合索引级别
例子:
将熊猫作为pd导入
d={'SourceID':[1,1,1,2,2,2],
“字段名”:[“P1”、“P2”、“P3”、“P4”、“P1”、“P2”、“P3”],
“VAL_1”:[100200300400500600700],
‘VAL_2’:[1000,2000,3000,4000,5000,6000,7000],}
df=pd.DataFrame(数据=d)
gby_temp=df.groupby(['SourceID','FieldName']).mean().unstack('FieldName'))
L=[(a,f'{b}{a}'),表示gby_temp.列中的a,b]
gby_temp.columns=pd.MultiIndex.from_元组(L)
gby_temp=gby_temp.reset_index()
gby临时设置索引('SourceID'))
gby_temp=gby_temp.reindex(已排序(gby_temp.columns),轴=1)
显示(gby_温度)
电流输出
| | ('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 |
我认为您的解决方案应该简化,因为不需要新的
多索引
,而是在取消堆栈
之后连接列名称的值:
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