我有一个pandas Dataframe,其中包含以下格式的时间:
2017-05-02 00:00:00+00:00
2017-05-03 01:00:00+00:00
我想找到他们在前一天的特定时间的差异,比如上面的例子:
2017-05-01 10:00:00
2017-05-02 10:00:00
我知道timedelta是解决方案,但我应该如何使用它?
答案 0 :(得分:2)
使用floor
,减去一天,并将Timedelata
中的10小时添加到新Series
个日期,这些日期是date
列的减值。
解决方案的优点是没有必要创建辅助列然后删除它。
print (df)
date
0 2017-05-02 00:00:00+00:00
1 2017-05-03 01:00:00+00:00
#if necessary convert to datetime
df['date']= pd.to_datetime(df['date'])
dates = df['date'].dt.floor('D') - pd.Timedelta(1, unit='d') + pd.Timedelta(10, unit='h')
print (dates)
0 2017-05-01 10:00:00
1 2017-05-02 10:00:00
Name: date, dtype: datetime64[ns]
df['timedelta'] = df['date'] - dates
print (df)
date timedelta
0 2017-05-02 00:00:00 14:00:00
1 2017-05-03 01:00:00 15:00:00
来自timedelata的秒数可以使用total_seconds
和另一个solutions:
df['seconds'] = (df['date'] - dates).dt.total_seconds().astype(int)
print (df)
date seconds
0 2017-05-02 00:00:00 50400
1 2017-05-03 01:00:00 54000
相同的解决方案,如果还需要new
列进行其他处理,则只有新列才会更好:
df['date']= pd.to_datetime(df['date'])
df['new'] = df['date'].dt.floor('D') - pd.Timedelta(1, unit='d') + pd.Timedelta(10, unit='h')
print (df)
date new
0 2017-05-02 00:00:00 2017-05-01 10:00:00
1 2017-05-03 01:00:00 2017-05-02 10:00:00
df['seconds'] = (df['date'] - df['new']).dt.total_seconds().astype(int)
print (df)
date new seconds
0 2017-05-02 00:00:00 2017-05-01 10:00:00 50400
1 2017-05-03 01:00:00 2017-05-02 10:00:00 54000