0
我有一个熊猫DataFrame的列“StartTime”,可以是任何日期时间值。我想创建第二个列,使StartTime相对于一周的开始(即上一个星期日的上午12点)。例如,这篇文章是自本周开始以来的5天,14小时。熊猫系列的时间算术
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