【问题标题】:Arrange value_counts by month按月排列 value_counts
【发布时间】:2021-07-06 13:32:34
【问题描述】:

我的数据框中有以下列

year-month
2020-01
2020-01
2020-01
2020-02
2020-02
...
2021-06

此列在我的数据框中存储为“对象”类型。我没有从一开始就将其转换为“日期时间”类型,因为那样我的值将改为“2020-01-01”(?)

无论如何,我想按月做一个 value_counts(),以便我可以随后将其绘制出来。如何按月对 value_counts() 进行排序,同时将月份反映为“Jan”、“Feb”...“Dec”?

我试过了:

pd.DateTime(df['year-month']).dt.month.value_counts().sort_index()

但是,月份反映为“1”、“2”...“12”,这不是我想要的

然后我尝试了这个:

pd.DateTime(df['year-month']).dt.strftime('%b').value_counts().sort_index()

这确实给了我“Jan”、“Feb”...“Dec”的月份,但现在它是按字母顺序而不是按实际月份顺序排序的。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    从你的这一点来看:

    result = pd.to_datetime(df["year-month"]).dt.strftime("%b").value_counts()
    

    我们可以reindex结果让索引依次变成月份名称缩写。这可以借用calendar 模块:

    import calendar
    
    # slicing out the first since it is empty string
    month_names = calendar.month_abbr[1:]
    
    # reindex and put 0 to those that didn't appear at all
    result = result.reindex(month_names, fill_value=0)
    

    得到

    >>> result
    
    Jan    3
    Feb    2
    Mar    0
    Apr    0
    May    0
    Jun    1
    Jul    0
    Aug    0
    Sep    0
    Oct    0
    Nov    0
    Dec    0
    

    calendar.month_abbr 开头有一个空字符串的原因是因为 Python 是 0 索引但我们说第 2 个月是 2 月;所以放一个空字符串会导致 month_abbr[2] == "February"。)

    【讨论】:

    • 我的声望太低,无法给你点赞,但谢谢!我将把语法合并成一行: pd.to_datetime(df["year-month"]).dt.strftime("%b").value_counts().reindex(calendar.month_abbr[1:])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2015-10-04
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多