大熊猫的时差与昨天的时间有关

时间:2017-07-06 08:08:41

标签: python pandas dataframe timedelta

我有一个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是解决方案,但我应该如何使用它?

1 个答案:

答案 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