首页 > 解决方案 > 如何在 pandas 数据帧上切换外部索引的顺序?

问题描述

假设我有一个像这样的简单数据框:

data = {"Weekday": ["Sun", "Sun", "Mon", "Mon"], "city": ["Austin", "Dallas", "Austin", "Dallas"], "visitors": [139, 237, 326,456], "signups": [7,12,3,5]}

df = pd.DataFrame(data)

具有多级索引

df.set_index(["Weekday", "city"], inplace=True)




       visitors  signups
Weekday city                     
Sun     Austin       139        7
        Dallas       237       12
Mon     Austin       326        3
        Dallas       456        5

在堆叠和取消堆叠,玩弄它,交换级别和重新索引之后,我最终得到了这个:

          
Weekday city                     
Mon     Austin       326        3
        Dallas       456        5
Sun     Austin       139        7
        Dallas       237       12

如何将外部索引切换回原始索引?

想不出一个简单的直接方法来做到这一点。

我得到的最接近的是

df = df.iloc[::-1]

这颠倒了内部和外部,这不是我想要的。我只是想让外部切换。

我还尝试了以下方法:

提前致谢。

标签: pythonpython-3.xpandasdataframe

解决方案


一种方法是将“原始”索引存储在变量中,然后稍后重新索引数据帧。

data = {"Weekday": ["Sun", "Sun", "Mon", "Mon"], "city": ["Austin", "Dallas", "Austin", "Dallas"], "visitors": [139, 237, 326,456], "signups": [7,12,3,5]}
df = pd.DataFrame(data)

df = df.set_index(["Weekday", "city"])
print('Original Dataframe')
print(df)
print('\n')
idx = df.index

df = df.stack().unstack()
print('Played with dataframe')
print(df)
print('\n')
df = df.reindex(idx)
print('Reindexed Dataframe')
print(df)

输出:

Original Dataframe
                visitors  signups
Weekday city                     
Sun     Austin       139        7
        Dallas       237       12
Mon     Austin       326        3
        Dallas       456        5


Played with dataframe
                visitors  signups
Weekday city                     
Mon     Austin       326        3
        Dallas       456        5
Sun     Austin       139        7
        Dallas       237       12


Reindexed Dataframe
                visitors  signups
Weekday city                     
Sun     Austin       139        7
        Dallas       237       12
Mon     Austin       326        3
        Dallas       456        5

推荐阅读