从Python(pandas)的日期列中获取星期开始日期(星期一)? [英] Get week start date (Monday) from a date column in 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屋!