簡體   English   中英

基於唯一的“其他”列,按月對數據框進行排序,重復年份

[英]Sorting a Data Frame by Month with Repeating Years, based on Unique 'Other' Column

在 pandas 中,我試圖按月對大數據幀的行進行排序。 目前,月份不正常。 它們按字母順序排序,但我想按時間順序對它們進行排序。 棘手的部分是我按 21 個月的周期對每一種產品進行分類。 有兩個年度列,一個用於日歷年度,一個用於會計年度,它們的目的有所不同。 2021 財年是 2021 年 1 月 - 2021 年 9 月,2022 財年是 2021 年 10 月 - 2022 年 9 月。產品有數百種,以下部分只是兩個產品的示例。

如下表所示,月份不正常,但其他一切都按正確的順序排列。

同樣,任何產品都有 21 個月,從 2021 年 1 月到 2022 年 9 月。我希望這些產品能夠按順序迭代每個產品。

我正在尋找一個代碼來以正確的方式對這個數據框進行排序。

現在的樣子(月份不按年份順序排列):

物品 公歷年 財政年度 數量
產品一 2021 2021 四月 45
產品一 2021 2021 八月 85
產品一 2021 2021 二月 25
產品一 2021 2021 一月 15
產品一 2021 2021 七月 75
產品一 2021 2021 六月 65
產品一 2021 2021 行進 35
產品一 2021 2021 可能 55
產品一 2021 2021 九月 95
產品一 2021 2022 十二月 125
產品一 2021 2022 十一月 115
產品一 2021 2022 十月 105
產品一 2022 2022 四月 405
產品一 2022 2022 八月 805
產品一 2022 2022 二月 205
產品一 2022 2022 一月 1005
產品一 2022 2022 七月 705
產品一 2022 2022 六月 605
產品一 2022 2022 行進 305
產品一 2022 2022 可能 505
產品一 2022 2022 九月 905
產品二 2021 2021 四月 4000
產品二 2021 2021 八月 8000
產品二 2021 2021 二月 2000
產品二 2021 2021 一月 1000
產品二 2021 2021 七月 7000
產品二 2021 2021 六月 6000
產品二 2021 2021 行進 3000
產品二 2021 2021 可能 5000
產品二 2021 2021 九月 9000
產品二 2021 2022 十二月 12000
產品二 2021 2022 十一月 11000
產品二 2021 2022 十月 10000
產品二 2022 2022 四月 40000
產品二 2022 2022 八月 80000
產品二 2022 2022 二月 20000
產品二 2022 2022 一月 10000
產品二 2022 2022 七月 70000
產品二 2022 2022 六月 60000
產品二 2022 2022 行進 30000
產品二 2022 2022 可能 50000
產品二 2022 2022 九月 90000

它應該看起來如何(按月排列):

物品 公歷年 財政年度 數量
產品一 2021 2021 一月 15
產品一 2021 2021 二月 25
產品一 2021 2021 行進 35
產品一 2021 2021 四月 45
產品一 2021 2021 可能 55
產品一 2021 2021 六月 65
產品一 2021 2021 七月 75
產品一 2021 2021 八月 85
產品一 2021 2021 九月 95
產品一 2021 2022 十月 105
產品一 2021 2022 十一月 115
產品一 2021 2022 十二月 125
產品一 2022 2022 一月 1005
產品一 2022 2022 二月 205
產品一 2022 2022 行進 305
產品一 2022 2022 四月 405
產品一 2022 2022 可能 505
產品一 2022 2022 六月 605
產品一 2022 2022 七月 705
產品一 2022 2022 八月 805
產品一 2022 2022 九月 905
產品二 2021 2021 一月 1000
產品二 2021 2021 二月 2000
產品二 2021 2021 行進 3000
產品二 2021 2021 四月 4000
產品二 2021 2021 可能 5000
產品二 2021 2021 六月 6000
產品二 2021 2021 七月 7000
產品二 2021 2021 八月 8000
產品二 2021 2021 九月 9000
產品二 2021 2022 十月 10000
產品二 2021 2022 十一月 11000
產品二 2021 2022 十二月 12000
產品二 2022 2022 一月 10000
產品二 2022 2022 二月 20000
產品二 2022 2022 行進 30000
產品二 2022 2022 四月 40000
產品二 2022 2022 可能 50000
產品二 2022 2022 六月 60000
產品二 2022 2022 七月 70000
產品二 2022 2022 八月 80000
產品二 2022 2022 九月 90000

首先將值轉換為有序分類,因此可以按DataFrame.sort_values中的多列排序:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM