Pandas按年和月对多级列进行排序

zxlwwiss  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(135)

我创建了一个带有多级列的可枢轴旋转的Pandas,但是列的顺序没有排序-

Year           2022     2021     2023      
Month      Jan  Feb  Mar Jan  Dec Jun

我想要的:

Year           2021     2022     2023      
Month      Jan  Mar  Jan Feb  Jun Dec

我怎样才能得到上述订单?

qxsslcnc

qxsslcnc1#

(最佳?)策略是在使用astype进行透视之前将Month列转换为有序CategoricalDtype

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
months = pd.CategoricalDtype(months, ordered=True)

rng = np.random.default_rng(2023)
df = pd.DataFrame({'ID': rng.integers(1, 3, 20),
                   'Year': rng.integers(2021, 2024, 20),
                   'Month': rng.choice(months.categories, 20),
                   'Value': rng.integers(1, 10, 20)})
out = (df.astype({'Month': months})
        .pivot_table(index='ID', columns=['Year', 'Month'], values='Value',
                     aggfunc='mean', fill_value=0))

输出:

>>> out
Year  2021                   2022              2023            
Month  Feb Mar  Sep  Oct Dec  Jan Jun Aug  Oct  Jun Sep Nov Dec
ID                                                             
1        0   8  1.5  6.5   6    8   8   2  7.0    9   9   3   0
2        4   4  0.0  0.0   0    0   0   2  8.5    0   0   0   3

现在,如果需要,您可以使用sort_index

相关问题