【问题标题】:sort pandas dataframe of month names in correct order按正确顺序对月份名称的熊猫数据框进行排序
【发布时间】:2014-11-27 21:46:39
【问题描述】:

我有一个带有一年中月份名称的数据框,即一月、二月、三月等

我想先按月份对数据进行排序,然后按类别排序,这样看起来像

Month_Name | Cat
Jan          1
Jan          2
Jan          3
Feb         1
Feb          2
Feb         3

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    pandas 不会为您做自定义排序功能,但您可以轻松添加一个临时列,即月份的索引,然后按该列排序

    months = {datetime.datetime(2000,i,1).strftime("%b"): i for i in range(1, 13)}
    df["month_number"] = df["month_name"].map(months)
    df.sort(columns=[...])
    

    您可能希望在读取数据框时利用pandas'良好的日期解析:如果您将日期存储为日期而不是字符串月份名称,那么您将能够按它们进行本地排序。

    【讨论】:

    • 感谢 katrielalex,所以我最好从 2014 年 11 月 30 日这样的日期开始,然后在此基础上创建一个新列。是否可以按日期列排序,但是当我在笔记本中显示数据时将其隐藏。所以如果我有两列,一列是日期,另一列是月份名称,你能说“按日期排序,只显示月份名称吗?
    • 你为什么不按完整的日期列排序,然后创建另一个带有月份名称的显示?
    • 是的,只是print df[columns] 而不是print df
    【解决方案2】:

    使用 Sort_Dataframeby_MonthandNumeric_cols 函数按月份和数字列对数据帧进行排序:

    你需要安装两个包,如下所示。

    pip install sorted-months-weekdays
    pip install sort-dataframeby-monthorweek
    

    例子:

    import pandas as pd
    
    from sorted_months_weekdays import *
    
    from sort_dataframeby_monthorweek import *
    
    df = pd.DataFrame([['Jan',23],['Jan',16],['Dec',35],['Apr',79],['Mar',53],['Mar',12],['Feb',3]], columns=['Month','Sum'])
    df
    Out[11]: 
      Month  Sum
    0   Jan   23
    1   Jan   16
    2   Dec   35
    3   Apr   79
    4   Mar   53
    5   Mar   12
    6   Feb    3
    

    为了得到按月和数字列排序的数据框,我使用了上面的函数。

    Sort_Dataframeby_MonthandNumeric_cols(df = df, monthcolumn='Month',numericcolumn='Sum')
    Out[12]: 
      Month  Sum
    0   Jan   16
    1   Jan   23
    2   Feb    3
    3   Mar   12
    4   Mar   53
    5   Apr   79
    6   Dec   35
    

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 2023-01-10
      • 2018-06-11
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多