df, inc_cr_date_day 및 inc_cr_date의 두 열을 기반으로 df의 새 열 [ 'inc_cr_date_adjusted']을 만들지 만 아래 코드가 예상대로 작동하지 않습니다. 오류를주지는 않지만 토요일과 일요일의 작업 조건만으로 조건에 의해 정의 된대로 작동하지 않습니다. & 시간이 포함 된 조건은 요일이 합산되지 않기 때문에 작동하지 않습니다 (Timedelta ('1 일)') 다른 문제는 대부분의 날짜가 마지막 줄의 코드 "df [ 'inc_cr_date']를 가정해야한다는 것입니다.) "전혀 바뀌지는 않지만, 또한 붙어 있지는 않습니다.새 열의 조건 Numpy 및 Timedelta를 사용하여
내 조건은 요일과 inc_cr_date 열에 표시되는 & 분을 기준으로합니다. 시간 & 분은 &을 사용하여 나눈 9:30와 18:30입니다.
코드는 다음과 같습니다
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'])
출력 (즉, 잘못) :
inc_cr_date,inc_cr_date_day,inc_cr_date_adjusted
2017-10-26 21:59:28.075,Thursday,2017-10-26 09:30:00.000 #nok, adjusted should be 2017-10-27 and not 2017-10-26.
2017-10-21 16:49:58.722,Saturday,2017-10-23 09:30:00.000 #ok
2017-10-11 09:30:05.258,Wednesday,2017-10-11 09:30:00.000 #nok, in such situation the adjusted date should be same as inc_cr_date
주셔서 감사합니다 입력에 대한 많은.
이 같은 작업의 종료 조건에 괄호를 넣어 시도 할 수 있습니다 당신이 usinig'pd.cut' 비닝 갈 선호하는 것입니다. 어쩌면 조건에 약간의 모호함이있을 수 있습니다. – Dark
나는 1 시간 이상 그것을 찾고 있는데 무엇이 잘못 될 수 있는지 찾을 수 없다. – Gonzalo
나는 코드를 최적화했다. :) – Dark