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

How to populate 2 columns in DataFrame with same "def" function?

我有一个包含日期列的数据框,我需要创建另外两列,其中包含“周开始日期”和“周结束日期”。这样做的原因是我需要按“isoweek”列进行分组......但还要保留这个两列“start_of_week_date”和“end_of_week_date”

我创建了以下函数:

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,其中包含以下几列

\>>> 日期、等周、数量

我需要将其更改为:

\>>> isoweek, start_of_week_date, end_of_week_date, 数量

这将使我的数据从 180 万行增加到 30 万行 :D

有人可以帮助我吗?

谢谢

希望我理解正确,请参考此 dt.weekday 计算周开始和周结束,这里我使用 6 作为 'Sunday' 如果您需要其他任何一天作为周末,请给出适当的数字.

星期几,星期一=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]') 

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

但是,如果您希望应用您自己的函数(这是完全可以接受的),那么可以使用 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)