[英]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.