2016-03-18 49 views
2
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 

我想生成一些從15:27:30到20分鐘的時間範圍。或者第二天找到..有人可以建議我爲這個任務的代碼片段?如何計算第二天的任何datetime64列的分鐘差異?

+0

是分鐘即範圍15:27:30到15:47:30(分鐘).. –

回答

1

我認爲你可以使用pd.offsetsDayMinute

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] 

您可以創建新的columns

df['Minutes20'] = df['DateTimeColumn'] + pd.offsets.Minute(20) 
df['NextDay'] = df['DateTimeColumn'] + pd.offsets.Day() 
print df 
    Index  DateTimeColumn   Minutes20    NextDay 
0 5517 2015-04-20 15:27:30 2015-04-20 15:47:30 2015-04-21 15:27:30 
1 5674 2015-04-20 15:37:30 2015-04-20 15:57:30 2015-04-21 15:37:30 
2 5675 2015-04-20 15:37:30 2015-04-20 15:57:30 2015-04-21 15:37:30 
3 5917 2015-04-20 15:49:30 2015-04-20 16:09:30 2015-04-21 15:49:30 
4 5919 2015-04-20 15:49:30 2015-04-20 16:09:30 2015-04-21 15:49:30 
5 6619 2015-04-20 16:18:12 2015-04-20 16:38:12 2015-04-21 16:18:12 
6 6652 2015-04-20 16:36:30 2015-04-20 16:56:30 2015-04-21 16:36:30 
7 6696 2015-04-20 16:21:42 2015-04-20 16:41:42 2015-04-21 16:21:42 

你可以找到差異下一Daynormalize

#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 

如果您想通過時間範圍內,第一組列DateTimeColumn索引選擇,然後indexer_between_time

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 

您可以創建startend時間offset由:

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 
+0

感謝它的工作..但你能建議我我可以寫一個關於數據框的查詢來從開始到結束選擇所有的日期記錄。開始= 15:27:30和結束= 15:47:30(20分鐘後) –

+0

太棒了!這'真的有幫助..但是這裏有一個變化是可以找到結束=開始時間+10分鐘。我可以執行查詢,例如> start_time&

+0

非常感謝。我想在第二天找到時間(小時,分鐘= 0)。如你所建議的。 2015-04-21 15:27:30 df ['NextDay'] = df ['DateTimeColumn'] + pd.offsets.Day()。像例子是2015-04-22 00:00:00 ..請建議您的解決方案。這是我的要求的最後一部分。 –