如何使用相同的"def"函数填充数据帧中的 2 列?



我有一个数据框架,它有一个日期列,我需要的是用;周开始日期";以及";周末日期";。这样做的原因是,然后我需要按";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

有人能帮我吗?

谢谢

可能有一些内置函数可以使用,我可以看到其中一个答案提出了这样的建议。

但是,如果您希望应用自己的函数(这是完全可以接受的(,则可以将applylambda一起使用。

这里有一个例子:

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]') 

最新更新