Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫表-将多索引转换为单索引_Python_Pandas - Fatal编程技术网

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