如何为多级索引中的某些列(但不是全部)交换级别

时间:2018-10-05 16:04:32

标签: python pandas

我有一个多级数据框,我想将多级索引中的两个项目从其顶层行索引(级别0)下降到级别1索引,以便随后可以将整个顶层0摆动并将其设置为垂直索引。到目前为止,这是我尝试过的:

import pandas as pd
newyork2 = pd.read_csv("https://github.com/thedatasleuth/New-York-Congressional-Districts/blob/master/newyork2.csv?raw=True")

newyork2.columns.get_level_values(0) #As you can see, 'Party' and 'Year' are part of this level - these are the columns I want to drop to level 1.

newyork2.columns.get_level_values(0)[0].swaplevel(0,1) # This breaks

1 个答案:

答案 0 :(得分:4)

很难从问题中弄清您想要什么。听起来好像您想在说以下内容时堆叠数据框:

  

这样我就可以将整个顶层0摆动并将其设置为垂直索引

import pandas

url = "https://github.com/thedatasleuth/New-York-Congressional-Districts/blob/master/newyork2.csv?raw=True"

newyork = (
    pandas.read_csv(url, header=[0, 1], index_col=[0, 1, 2])
        .reset_index(level=0, drop=True)
        .stack(level='DISTRICT')
        .rename_axis(['PARTY', 'YEAR','DISTRICT'], axis='index')
)

我得到:

STATUS                 Active  Inactive     Total
Party Year DISTRICT                              
DEM   2014 1         134293.0    9029.0  143322.0
           10        241859.0   29860.0  271719.0
           11        181049.0   10798.0  191847.0
           12        245977.0   35086.0  281063.0
           13        314229.0   37961.0  352190.0
           14        199060.0   17156.0  216216.0
           15        265862.0   29801.0  295663.0
           16        239335.0   22452.0  261787.0
           17        185510.0   13949.0  199459.0
           18        145155.0   12118.0  157273.0