如何使用相同的 "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]')
可能存在可以使用的内置函数,我可以看到其中一个答案提出了这样的建议。
但是,如果您希望应用您自己的函数(这是完全可以接受的),那么可以使用 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)
我有一个包含日期列的数据框,我需要创建另外两列,其中包含“周开始日期”和“周结束日期”。这样做的原因是我需要按“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]')
可能存在可以使用的内置函数,我可以看到其中一个答案提出了这样的建议。
但是,如果您希望应用您自己的函数(这是完全可以接受的),那么可以使用 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)