从 Python (pandas) 的日期列中获取周开始日期(星期一)?

新手上路,请多包涵

我看过很多关于如何使用日期字符串执行此操作的帖子,但我正在为数据框列尝试一些操作,但到目前为止还没有成功。我目前的方法是:从“myday”获取工作日,然后偏移以获得星期一。

 df['myday'] is column of dates.
mydays = pd.DatetimeIndex(df['myday']).weekday
df['week_start'] = pd.DatetimeIndex(df['myday']) - pd.DateOffset(days=mydays)

但是我得到 TypeError: timedelta days component: numpy.ndarray 不受支持的类型

如何从 df 列获取周开始日期?

原文由 dev28 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 842
2 个回答

它失败了,因为 pd.DateOffset 需要一个整数作为参数(并且您正在为它提供一个数组)。您只能使用 DateOffset 按相同的偏移量更改日期列。

试试这个 :

 import datetime as dt
# Change 'myday' to contains dates as datetime objects
df['myday'] = pd.to_datetime(df['myday'])
# 'daysoffset' will container the weekday, as integers
df['daysoffset'] = df['myday'].apply(lambda x: x.weekday())
# We apply, row by row (axis=1) a timedelta operation
df['week_start'] = df.apply(lambda x: x['myday'] - dt.TimeDelta(days=x['daysoffset']), axis=1)

我还没有实际测试过这段代码(没有样本数据),但这应该适用于你所描述的内容。

但是,您可能想看看 pandas.Resample ,它可能会提供更好的解决方案——具体取决于您要寻找的内容。

原文由 knightofni 发布,翻译遵循 CC BY-SA 4.0 许可协议

另一种选择:

 df['week_start'] = df['myday'].dt.to_period('W').apply(lambda r: r.start_time)

这会将“week_start”设置为“myday”时间之前的第一个星期一。

您可以通过 锚定偏移量 选择不同的星期开始,例如 ’W-THU’ 改为在星期四开始一周。 (感谢@Henry Ecker 的建议)

原文由 carleton 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题