以列表形式使用索引对数据框进行排序

Sorting an Dataframe wtih Index in form of List

我有一个 pandas df 需要根据列表中给定的固定顺序进行排序。我遇到的问题是我正在尝试的排序没有按照我期望的列表顺序的指定顺序移动数据行。我的列表和 DataFrame (df) 如下所示:

months = ['5','6','7','8','9','10','11','12','1','2']

df =

year       1992      1993      1994      1995
month                                        
1     -0.343107 -0.211959  0.437974 -1.219363
2     -0.383353  0.888650  1.054926  0.714846
5      0.057198  1.246682  0.042684  0.275701
6     -0.100018 -0.801554  0.001111  0.382633
7     -0.283815  0.204448  0.350705  0.130652
8      0.042195 -0.433849 -1.481228 -0.236004
9      1.059776  0.875214  0.304638  0.127819
10    -0.328911 -0.256656  1.081157  1.057449
11    -0.488213 -0.957050 -0.813885  1.403822
12     0.973031 -0.246714  0.600157  0.579038

我得到的最接近的是这个-

newdf = pd.DataFrame(df.values, index=list(months))

...但它不会移动行。此命令仅在索引列中添加月份 w/out 移动数据。

           0         1         2         3
5  -0.343107 -0.211959  0.437974 -1.219363
6  -0.383353  0.888650  1.054926  0.714846
7   0.057198  1.246682  0.042684  0.275701
8  -0.100018 -0.801554  0.001111  0.382633
9  -0.283815  0.204448  0.350705  0.130652
10  0.042195 -0.433849 -1.481228 -0.236004
11  1.059776  0.875214  0.304638  0.127819
12 -0.328911 -0.256656  1.081157  1.057449
1  -0.488213 -0.957050 -0.813885  1.403822
2   0.973031 -0.246714  0.600157  0.579038

我需要结果看起来像 -

year    1992      1993      1994      1995
month
5   0.057198  1.246682  0.042684  0.275701
6  -0.100018 -0.801554  0.001111  0.382633
7  -0.283815  0.204448  0.350705  0.130652
8   0.042195 -0.433849 -1.481228 -0.236004
9   1.059776  0.875214  0.304638  0.127819
10 -0.328911 -0.256656  1.081157  1.057449
11 -0.488213 -0.957050 -0.813885  1.403822
12  0.973031 -0.246714  0.600157  0.579038
1  -0.343107 -0.211959  0.437974 -1.219363
2  -0.383353  0.888650  1.054926  0.714846

假设df.indexdtype('int64'),首先将months转换为整数。然后使用 loc:

months = [*map(int, months)]
out = df.loc[months]

如果 df.indexdtype('O'),您可以立即使用 loc,即您不需要第一行。

输出:

year       1992      1993      1994      1995
month                                        
5      0.057198  1.246682  0.042684  0.275701
6     -0.100018 -0.801554  0.001111  0.382633
7     -0.283815  0.204448  0.350705  0.130652
8      0.042195 -0.433849 -1.481228 -0.236004
9      1.059776  0.875214  0.304638  0.127819
10    -0.328911 -0.256656  1.081157  1.057449
11    -0.488213 -0.957050 -0.813885  1.403822
12     0.973031 -0.246714  0.600157  0.579038
1     -0.343107 -0.211959  0.437974 -1.219363
2     -0.383353  0.888650  1.054926  0.714846