我有一个数据框架,它有一个日期列,我需要的是用;周开始日期";以及";周末日期";。这样做的原因是,然后我需要按";isoweek";柱而且还保持这两列";开始_ of_;以及";end_of_ week_;
我创建了以下功能:
def myfunc(dt, option):
wkday = dt.isoweekday()
if option == 'start':
delta = datetime.timedelta(1 - wkday)
elif option == 'end':
delta = datetime.timedelta(7 - wkday)
else:
raise TypeError
return date + delta
现在我不知道如何使用上面的函数来填充列。
可能甚至不需要我的功能来获得我需要的东西。。。也就是…我有一个DF,它有下面的列
\>gt>日期,等周,数量
我需要将其更改为:
\>gt>isoweek,start_of_week_date,end_of_window_date,数量
这将使我的数据从180万行增加到30万行:D
有人能帮我吗?
谢谢
可能有一些内置函数可以使用,我可以看到其中一个答案提出了这样的建议。
但是,如果您希望应用自己的函数(这是完全可以接受的(,则可以将apply
与lambda
一起使用。
这里有一个例子:
import pandas as pd
from datetime import datetime
# an example dataframe
d = {'some date':[1,2,3,4],
'other data':[2,4,6,8]}
df = pd.DataFrame(d)
# user defined function from the question
def myfunc(dt, option):
wkday = dt.isoweekday()
if option == 'start':
delta = datetime.timedelta(1 - wkday)
elif option == 'end':
delta = datetime.timedelta(7 - wkday)
else:
raise TypeError
return date + delta
df['new_col'] = df.apply(lambda x: myfunc(df['some data'], df['other data']), axis=1)
希望我理解正确,请参阅此dt.weekday来计算周开始&周末,这里我用6表示"星期日",如果你需要其他日子作为周末,请给出合适的数字。
星期一=0,星期日=6 的一周中的哪一天
df['start_of_week_date'] = df['Date'] - df['Date'].dt.weekday.astype('timedelta64[D]')
df['end_of_week_date'] = df['Date'] + (6 - df['Date'].dt.weekday).astype('timedelta64[D]')