如何将日期四舍五入开始在熊猫

Dan*_*anT 2 python pandas

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

Nic*_*sen 8

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

df["week_start"] = pd.to_datetime(["timestamp_col"]).dt.to_period('W-SUN').dt.start_time
Run Code Online (Sandbox Code Playgroud)

GH 讨论在这里


Dan*_*anT 6

import pandas as pd
df['Date'] - pd.to_timedelta(df['Date'].dt.dayofweek, unit='d')
Run Code Online (Sandbox Code Playgroud)


jed*_*edi 6

这是使用便捷方法计算周开始时间序列的另一种方法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')), 
                         )
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

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

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

原始列中的天数是:

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