У меня есть файл данных pandas с колонкой «StartTime», который может быть любым значением datetime. Я хотел бы создать второй столбец, который дает StartTime относительно начала недели (т. Е. 12 утра в предыдущее воскресенье). Например, этот пост составляет 5 дней, 14 часов с начала этой недели.Арифметика времени в серии pandas
StartTime
1 2007-01-19 15:59:24
2 2007-03-01 04:16:08
3 2006-11-08 20:47:14
4 2008-09-06 23:57:35
5 2007-02-17 18:57:32
6 2006-12-09 12:30:49
7 2006-11-11 11:21:34
Я могу это сделать, но это довольно Данг медленно:
def time_since_week_beg(x):
y = x.to_datetime()
return pd.Timedelta(days=y.weekday(),
hours=y.hour,
minutes=y.minute,
seconds=y.second
)
df['dt'] = df.StartTime.apply(time_since_week_beg)
То, что я хочу что-то вроде этого, что не приводит к ошибке:
df['dt'] = pd.Timedelta(days=df.StartTime.dt.dayofweek,
hours=df.StartTime.dt.hour,
minute=df.StartTime.dt.minute,
second=df.StartTime.dt.second
)
TypeError: Invalid type <class 'pandas.core.series.Series'>. Must be int or float.
Любой мысли?
Это, безусловно, чище. Я не уверен, что это быстрее. В любом случае, вы можете думать о том, что может выполнять операции над серией? Не знаю, поможет ли это ускорить работу или нет. –
Это, вероятно, не будет быстрее. 'df.StartTime.apply (lambda ts: pd.Timedelta (days = ts.dayofweek, hours = ts.hour, minutes = ts.minute, seconds = ts.second))' – Alexander
На 100k строках тайминги практически идентичны. – Alexander