我创建了一个带有多级列的可枢轴旋转的Pandas,但是列的顺序没有排序-
Year 2022 2021 2023 Month Jan Feb Mar Jan Dec Jun
我想要的:
Year 2021 2022 2023 Month Jan Mar Jan Feb Jun Dec
我怎样才能得到上述订单?
qxsslcnc1#
(最佳?)策略是在使用astype进行透视之前将Month列转换为有序CategoricalDtype:
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。
sort_index
1条答案
按热度按时间qxsslcnc1#
(最佳?)策略是在使用
astype
进行透视之前将Month
列转换为有序CategoricalDtype
:输出:
现在,如果需要,您可以使用
sort_index
。