Python 如何计算任何datetime64列第二天的分钟差?

Python 如何计算任何datetime64列第二天的分钟差?,python,pandas,dataframe,Python,Pandas,Dataframe,我想生成一些时间范围,比如15:27:30到20分钟。或者第二天找到。。有人能给我推荐这项任务的代码片段吗?我想你可以用像天或分钟: Index DateTimeColumn 5517 2015-04-20 15:27:30 5674 2015-04-20 15:37:30 5675 2015-04-20 15:37:30 5917 2015-04-20 15:49:30 5919 2015-04-20 15:49:30 6619 2015-04-20 1

我想生成一些时间范围,比如15:27:30到20分钟。或者第二天找到。。有人能给我推荐这项任务的代码片段吗?

我想你可以用像
分钟

Index   DateTimeColumn
5517    2015-04-20 15:27:30
5674    2015-04-20 15:37:30
5675    2015-04-20 15:37:30
5917    2015-04-20 15:49:30
5919    2015-04-20 15:49:30
6619    2015-04-20 16:18:12
6652    2015-04-20 16:36:30
6696    2015-04-20 16:21:42
您可以创建新的

print df['DateTimeColumn'] + pd.offsets.Minute(20)
0   2015-04-20 15:47:30
1   2015-04-20 15:57:30
2   2015-04-20 15:57:30
3   2015-04-20 16:09:30
4   2015-04-20 16:09:30
5   2015-04-20 16:38:12
6   2015-04-20 16:56:30
7   2015-04-20 16:41:42
Name: DateTimeColumn, dtype: datetime64[ns]

print df['DateTimeColumn'] + pd.offsets.Day()
0   2015-04-21 15:27:30
1   2015-04-21 15:37:30
2   2015-04-21 15:37:30
3   2015-04-21 15:49:30
4   2015-04-21 15:49:30
5   2015-04-21 16:18:12
6   2015-04-21 16:36:30
7   2015-04-21 16:21:42
Name: DateTimeColumn, dtype: datetime64[ns]
您可以通过以下方式找到与下一天的差异:

如果要按时间范围选择,请首先将列
DateTimeColumn
设置为索引,然后:

您可以通过以下方式创建
开始
结束
时间
偏移

print df
   Index      DateTimeColumn
0   5517 2015-04-20 15:27:30
1   5674 2015-04-20 15:37:30
2   5675 2015-04-20 15:37:30
3   5917 2015-04-20 15:49:30
4   5675 2015-04-21 15:37:30
5   5917 2015-04-22 15:49:30
6   5919 2015-04-23 15:49:30
7   6619 2015-04-20 16:18:12
8   6652 2015-04-20 16:36:30
9   6696 2015-04-20 16:21:42

start = pd.to_datetime('15:27:30').time()
end = pd.to_datetime('15:47:30').time()
print start
15:27:30
print end
15:47:30

df.index = df['DateTimeColumn']
print df.ix[df.index.indexer_between_time(start, end)]
                     Index      DateTimeColumn
DateTimeColumn                                
2015-04-20 15:27:30   5517 2015-04-20 15:27:30
2015-04-20 15:37:30   5674 2015-04-20 15:37:30
2015-04-20 15:37:30   5675 2015-04-20 15:37:30
2015-04-21 15:37:30   5675 2015-04-21 15:37:30

这是分钟的范围,即15:27:30到15:47:30(分钟)…感谢它的工作。。但是你能建议我在数据框上写一个查询来选择从头到尾的所有日期记录吗。开始=15:27:30和结束=15:47:30(20分钟后)太好了!!那真的很有帮助。。但是这里的一个变化是可以找到结束=开始时间+10分钟。我可以执行如下查询:开始时间和结束时间。非常感谢。。我想在第二天找到后重置时间(小时,分钟=0)。正如你所建议的。2015-04-21 15:27:30 df['NextDay']=df['DateTimeColumn']+pd.offset.Day()。类似的例子是2015-04-22 00:00:00。。请提出你的解决方案。这是我需求的最后一部分。我认为您可以使用
dt.normalize()
,正如我在下一行中建议的那样。或者你需要别的什么?
#df['Minutes20'] = df['DateTimeColumn'] + pd.offsets.Minute(20)
df['NextDay'] = df['DateTimeColumn'] + pd.offsets.Day()
df['NextDayNorm'] = df['NextDay'].dt.normalize() 
df['NextDayDiff'] = df['NextDay'].dt.normalize() - df['DateTimeColumn']
print df
   Index      DateTimeColumn             NextDay NextDayNorm  NextDayDiff
0   5517 2015-04-20 15:27:30 2015-04-21 15:27:30  2015-04-21     08:32:30
1   5674 2015-04-20 15:37:30 2015-04-21 15:37:30  2015-04-21     08:22:30
2   5675 2015-04-20 15:37:30 2015-04-21 15:37:30  2015-04-21     08:22:30
3   5917 2015-04-20 15:49:30 2015-04-21 15:49:30  2015-04-21     08:10:30
4   5919 2015-04-20 15:49:30 2015-04-21 15:49:30  2015-04-21     08:10:30
5   6619 2015-04-20 16:18:12 2015-04-21 16:18:12  2015-04-21     07:41:48
6   6652 2015-04-20 16:36:30 2015-04-21 16:36:30  2015-04-21     07:23:30
7   6696 2015-04-20 16:21:42 2015-04-21 16:21:42  2015-04-21     07:38:18
print df
   Index      DateTimeColumn
0   5517 2015-04-20 15:27:30
1   5674 2015-04-20 15:37:30
2   5675 2015-04-20 15:37:30
3   5917 2015-04-20 15:49:30
4   5675 2015-04-21 15:37:30
5   5917 2015-04-22 15:49:30
6   5919 2015-04-23 15:49:30
7   6619 2015-04-20 16:18:12
8   6652 2015-04-20 16:36:30
9   6696 2015-04-20 16:21:42

start = pd.to_datetime('15:27:30').time()
end = pd.to_datetime('15:47:30').time()
print start
15:27:30
print end
15:47:30

df.index = df['DateTimeColumn']
print df.ix[df.index.indexer_between_time(start, end)]
                     Index      DateTimeColumn
DateTimeColumn                                
2015-04-20 15:27:30   5517 2015-04-20 15:27:30
2015-04-20 15:37:30   5674 2015-04-20 15:37:30
2015-04-20 15:37:30   5675 2015-04-20 15:37:30
2015-04-21 15:37:30   5675 2015-04-21 15:37:30
startdate = pd.to_datetime('15:27:30')
enddate = startdate + pd.offsets.Minute(20)

start = startdate.time()
end = enddate.time()
print start
15:27:30
print end
15:47:30