gpt4 book ai didi

python - pandas df 的新日期列(有条件)

转载 作者:行者123 更新时间:2023-11-30 22:26:39 26 4
gpt4 key购买 nike

您能解释一下我在这里做错了什么吗?我想创建一个新的日期列,如果“inc_cr_date_day”不是“星期日”或“星期六”,则新日期将与“inc_cr_date”列相同。什么时候是星期六或星期日,我希望新列分别为“inc_cr_date”+1 和 +2 天。

df 是:

inc_cr_date              inc_cr_date_day
2017-10-26 21:59:28.075 Thursday
2017-10-27 08:17:02.718 Friday
2017-10-22 14:44:07.695 Sunday

代码(更新):

df['inc_cr_date_day'] = df['inc_cr_date'].dt.weekday_name

df['inc_cr_date_adjusted'] = np.select([(df['inc_cr_date_day'] == 'Saturday'),#condition working
(df['inc_cr_date_day'] == 'Sunday'),#condition working
((df['inc_cr_date_day'] == 'Monday')& (df['inc_cr_date'].dt.hour > 18 ) & df['inc_cr_date'].dt.minute > 30),
((df['inc_cr_date_day'] == 'Monday')& (df['inc_cr_date'].dt.hour < 9 ) & df['inc_cr_date'].dt.minute < 30),
((df['inc_cr_date_day'] == 'Tuesday')& (df['inc_cr_date'].dt.hour > 18 ) & df['inc_cr_date'].dt.minute > 30),
((df['inc_cr_date_day'] == 'Tuesday')& (df['inc_cr_date'].dt.hour < 9 ) & df['inc_cr_date'].dt.minute < 30),
((df['inc_cr_date_day'] == 'Wednesday')& (df['inc_cr_date'].dt.hour > 18 ) & df['inc_cr_date'].dt.minute > 30),
((df['inc_cr_date_day'] == 'Wednesday')& (df['inc_cr_date'].dt.hour < 9 ) & df['inc_cr_date'].dt.minute < 30),
((df['inc_cr_date_day'] == 'Thursday')& (df['inc_cr_date'].dt.hour > 18 ) & df['inc_cr_date'].dt.minute > 30),
((df['inc_cr_date_day'] == 'Thursday')& (df['inc_cr_date'].dt.hour < 9 ) & df['inc_cr_date'].dt.minute < 30),
((df['inc_cr_date_day'] == 'Friday')& (df['inc_cr_date'].dt.hour > 18 ) & df['inc_cr_date'].dt.minute > 30),
((df['inc_cr_date_day'] == 'Friday')& (df['inc_cr_date'].dt.hour < 9 ) & df['inc_cr_date'].dt.minute < 30)],


[(df['inc_cr_date']+pd.Timedelta('2 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('0 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('0 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('0 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('0 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('3 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes'),
(df['inc_cr_date']+pd.Timedelta('0 days')).dt.normalize() + pd.Timedelta('9 Hours 30 Minutes')],

df['inc_cr_date'])

非常感谢您的投入。

最佳答案

您在发布的问题中所做的是将 timedelta 添加到列表 ['inc_cr_date'] + pd.DateOffset(1)。尝试使用 row['inc_cr_date'] + pd.DateOffset(1)

所以我们可以使用 np.select 的力量来代替 if、elseif、else和 + pd.Timedelta

df['inc_cr_date2'] = np.select([(df['inc_cr_date_day'] == 'Saturday'),
(df['inc_cr_date_day'] == 'Sunday')],

[df['inc_cr_date']+pd.Timedelta('1 days'),
df['inc_cr_date']+pd.Timedelta('2 days')],

df['inc_cr_date'])
             inc_cr_date inc_cr_date_day            inc_cr_date20 2017-10-26 21:59:28.075        Thursday 2017-10-26 21:59:28.0751 2017-10-27 08:17:02.718          Friday 2017-10-27 08:17:02.7182 2017-10-22 14:44:07.695          Sunday 2017-10-24 14:44:07.695

For specific time we can use normalize and add timedelta of hours you want ie.

df['inc_cr_date2'] = np.select([(df['inc_cr_date_day'] == 'Saturday'),
(df['inc_cr_date_day'] == 'Sunday')],

[(df['inc_cr_date']+pd.Timedelta('1 days')).dt.normalize() + pd.Timedelta('9 Hours'),
(df['inc_cr_date']+pd.Timedelta('2 days')).dt.normalize() + pd.Timedelta('9 Hours')],

df['inc_cr_date'])
           inc_cr_date inc_cr_date_day            inc_cr_date20 2017-10-26 21:59:28.075        Thursday 2017-10-26 21:59:28.0751 2017-10-27 08:17:02.718          Friday 2017-10-27 08:17:02.7182 2017-10-22 14:44:07.695          Sunday 2017-10-24 09:00:00.000

关于python - pandas df 的新日期列(有条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com