【发布时间】:2015-12-31 01:50:14
【问题描述】:
我有一个带有日期列的 DataFrame。如何将每个日期 d 映射到包含 d 的一周的开始日期?
【问题讨论】:
我有一个带有日期列的 DataFrame。如何将每个日期 d 映射到包含 d 的一周的开始日期?
【问题讨论】:
import pandas as pd
df['Date'] - pd.to_timedelta(df['Date'].dt.dayofweek, unit='d')
【讨论】:
这里是使用便捷方法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')
如果您没有日期,则接受的答案将不起作用(至少对我而言)。如果您有 pandas._libs.tslibs.timestamps.Timestamp 对象,请改用它:
df["week_start"] = pd.to_datetime(["timestamp_col"]).dt.to_period('W-SUN').dt.start_time
GH讨论一下here
【讨论】: