从Python(pandas)的日期列中获取星期开始日期(星期一)? [英] Get week start date (Monday) from a date column in Python (pandas)?

查看:1866
本文介绍了从Python(pandas)的日期列中获取星期开始日期(星期一)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经看到很多关于如何使用日期字符串来完成它的文章,但是我正在尝试为dataframe列做一些事情,到目前为止还算不上什么运气. 我当前的方法是:从"myday"获取工作日,然后偏移为monday.

I have seen a lot of posts about how you can do it with a date string but I am trying something for a dataframe column and haven't got any luck so far. My current method is : Get the weekday from 'myday' and then offset to get monday.

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天组件不受支持的类型:numpy.ndarray

But I get TypeError: unsupported type for timedelta days component: numpy.ndarray

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

How can I get week start date from a df column?

推荐答案

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

it fails because pd.DateOffset expects a single integer as a parameter (and you are feeding it an array). You can only use DateOffset to change a date column by the same offset.

尝试:

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)

我实际上没有测试过此代码(没有示例数据),但这应该可以满足您的描述.

I haven't actually tested this code, (there was no sample data), but that should work for what you have described.

但是,您可能希望查看 pandas.重新采样,这可能会提供更好的解决方案-取决于您要查找的内容.

However, you might want to look at pandas.Resample, which might provide a better solution - depending on exactly what you are looking for.

这篇关于从Python(pandas)的日期列中获取星期开始日期(星期一)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆