首页 > 解决方案 > 将具有多级索引的数据框值转换为单列

问题描述

我想请教您的意见。

如何将第一个数据帧转换为下面的第二个?

Continent、Country 和 Location 是列索引的名称。

Polution_level 将作为第一个数据帧上存在的值的列名添加。


     Continent     Asia     Asia        Africa       Europe
       Country     Japan    China       Mozambique   Portugal
      Location     Tokyo    Shanghai    Maputo       Lisbon
Date  
01 Jan 20          250      435         45           137
02 Jan 20          252      457         43           144
03 Jan 20          253      463         42           138


Continent   Country     Location   Date        Polution_Level
Asia        Japan       Tokyo      01 Jan 20   250 
Asia        Japan       Tokyo      02 Jan 20   252
Asia        Japan       Tokyo      03 Jan 20   253 
...
Europe      Portugal    Lisbon     03 Jan 20   138

谢谢你。

标签: pythondataframe

解决方案


以下应该做你想要的。

模块

import io
import pandas as pd

创建数据

df = pd.read_csv(io.StringIO("""
      Continent     Asia     Asia        Africa       Europe
      Country     Japan    China       Mozambique   Portugal
      Location     Tokyo    Shanghai    Maputo       Lisbon
Date
01 Jan 20          250      435         45           137
02 Jan 20          252      457         43           144
03 Jan 20          253      463         42           138
"""), sep="\s\s+", engine="python", header=[0,1,2], index_col=[0])

验证多索引

df.columns

MultiIndex([(  'Asia',      'Japan',    'Tokyo'),
        (  'Asia',      'China', 'Shanghai'),
        ('Africa', 'Mozambique',   'Maputo'),
        ('Europe',   'Portugal',   'Lisbon')],
       names=['Continent', 'Country', 'Location'])

转置表和堆栈值

ndf = df.T.stack().reset_index()
ndf.rename({0:'Polution_Level'}, axis=1)

在此处输入图像描述


推荐阅读