【问题标题】:Pandas: monthly date range with number of days熊猫:每月日期范围和天数
【发布时间】:2017-09-20 10:38:48
【问题描述】:

假设我有一个像这样的开始和结束日期:

start_d = datetime.date(2017, 7, 20)
end_d = datetime.date(2017, 9, 10)

我希望得到一个如下所示的 Pandas DataFrame:

Month    NumDays
2017-07  12
2017-08  31
2017-09  10

它显示了我的范围内每个月的天数。

到目前为止,我可以使用pd.date_range(start_d, end_d, freq='MS') 生成每月系列。

【问题讨论】:

    标签: python pandas date-range


    【解决方案1】:

    您可以先使用date_range 默认day 频率,然后使用size 创建Seriesresample。最后由to_period转换为month句号:

    import datetime as dt    
    
    start_d = dt.date(2017, 7, 20)
    end_d = dt.date(2017, 9, 10)
    
    s = pd.Series(index=pd.date_range(start_d, end_d), dtype='float64')
    
    df = s.resample('MS').size().rename_axis('Month').reset_index(name='NumDays')
    df['Month'] = df['Month'].dt.to_period('m')
    print (df)
        Month  NumDays
    0 2017-07       12
    1 2017-08       31
    2 2017-09       10
    

    感谢Zero 简化解决方案:

    df = s.resample('MS').size().to_period('m').rename_axis('Month').reset_index(name='NumDays')
    

    【讨论】:

    • 这真的很好
    • 太棒了!我正在使用以下内容来获取该月的总天数:df['TotalDays'] = df['Month'].apply(lambda m: calendar.monthrange(m.year, m.month)[1])
    • df = s.resample('MS').size().to_period(freq='M').rename_axis('Month').reset_index(name='NumDays') 就足够了。
    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    相关资源
    最近更新 更多