【问题标题】:How to round dates to week starts in Pandas如何在 Pandas 中将日期舍入到星期开始
【发布时间】:2015-12-31 01:50:14
【问题描述】:

我有一个带有日期列的 DataFrame。如何将每个日期 d 映射到包含 d 的一周的开始日期?

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    import pandas as pd
    df['Date'] - pd.to_timedelta(df['Date'].dt.dayofweek, unit='d')
    

    【讨论】:

      【解决方案2】:

      这里是使用便捷方法pd.DateOffset(weekday=0,weeks=1) 计算周开始系列的另一种方法:

      import pandas as pd, numpy as np
      df=pd.DataFrame({'date':pd.date_range('2016-10-01','2016-10-31')})
      df['BeginWeek']=np.where(df.date.dt.weekday==0, # offset on Non Mondays only
                               df['date'], 
                               df['date']-np.timedelta64(1,'W')), 
                               )
      

      感谢ribitskyib np.where 被添加到当日期已经是星期一时选择当前星期一。确认上述内容现在有效:

      其他人提供的一些额外想法:

      以下是一周中几天的快速列表:

      df['BeginWeek'].dt.strftime("%a").unique() 
      array(['Mon'], dtype=object)
      

      原始列中的天数是:

      df['date'].dt.strftime("%a").unique()
      array(['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'], dtype=object)
      

      【讨论】:

      • 如果日期已经是星期一,它会给出不正确的(在问题的上下文中)结果 - 它将它移回前一周的星期一 pd.Timestamp('2019-10-07') - pd.DateOffset(weekday=0, weeks=1) 给出 Timestamp('2019-09-30 00:00:00')
      【解决方案3】:

      如果您没有日期,则接受的答案将不起作用(至少对我而言)。如果您有 pandas._libs.tslibs.timestamps.Timestamp 对象,请改用它:

      df["week_start"] = pd.to_datetime(["timestamp_col"]).dt.to_period('W-SUN').dt.start_time
      

      GH讨论一下here

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多