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