根据唯一的“其他”列,按月对具有重复年份的数据帧进行排序

2024-05-17 17:00:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在pandas中,我尝试按月对大型数据帧中的行进行排序。目前,这几个月是不正常的。它们是按字母顺序排列的,但我想按时间顺序排列。 棘手的是,我对每一种产品按21个月的周期进行排序。有两个年份栏,一个用于日历年,一个用于会计年,它们的用途不同。2021财年为2021年1月至2021年9月,2022财年为2021年10月至2022年9月。有数百种产品,下面的部分只是两种产品的示例

从下表中可以看出,月份是无序的,但其他一切都是有序的

同样,ever产品有21个月,从2021年1月到2022年9月。我希望对每个产品进行迭代

我正在寻找一个代码,以正确的方式排序这个数据帧

现在的样子(月份不按年份排序):

^{tb1}$

外观(按月份顺序):

^{tb2}$

Tags: 数据示例pandas排序产品字母时间用途
1条回答
网友
1楼 · 发布于 2024-05-17 17:00:25

首先将值转换为ordered categoricals,以便可以按^{}中的多个列进行排序:

cat = ['January','February','March','April','May','June',
       'July','August','September','October','November','December']
df['Month'] = pd.Categorical(df['Month'], ordered=True, categories=cat)
df = df.sort_values(['Item','Calendar Year','Month'])

或者创建DatetimeIndex,以便可以通过Item和日期时间进行排序:

df.index = pd.to_datetime(df['Calendar Year'] + df['Month'], format='%Y%B')
df = df.rename_axis('dt').sort_values(['Item','dt']).reset_index(drop=True)

相关问题 更多 >