簡體   English   中英

Pandas DataFrame 計算特定時間范圍內兩列之間的時間差

[英]Pandas DataFrame Calculate time difference between 2 columns on specific time range

我想計算特定時間范圍內兩列之間的時間差。

我嘗試df.between_time但它只適用於索引。

前任。 時間范圍:18.00 - 8.00

數據 :

             start               stop
0   2018-07-16 16:00:00  2018-07-16 20:00:00
1   2018-07-11 08:03:00  2018-07-11 12:03:00
2   2018-07-13 17:54:00  2018-07-13 21:54:00
3   2018-07-14 13:09:00  2018-07-14 17:09:00
4   2018-07-20 00:21:00  2018-07-20 04:21:00
5   2018-07-20 17:00:00  2018-07-21 09:00:00

預期結果:

          start                  stop           time_diff
0   2018-07-16 16:00:00  2018-07-16 20:00:00    02:00:00
1   2018-07-11 08:03:00  2018-07-11 12:03:00    0
2   2018-07-13 17:54:00  2018-07-13 21:54:00    03:54:00
3   2018-07-14 13:09:00  2018-07-14 17:09:00    0
4   2018-07-20 00:21:00  2018-07-20 04:21:00    04:00:00
5   2018-07-20 17:00:00  2018-07-21 09:00:00    14:00:00

注意:如果 time_diff > 1 天,我已經處理過這種情況。

問題:我應該構建一個函數來做到這一點還是有 Pandas 內置函數來做到這一點? 任何幫助或指導將不勝感激。

我認為這可以是一個解決方案

tmp = pd.DataFrame({'time1': pd.to_datetime(['2018-07-16 16:00:00', '2018-07-11 08:03:00', 
                                             '2018-07-13 17:54:00', '2018-07-14 13:09:00', 
                                             '2018-07-20 00:21:00', '2018-07-20 17:00:00']),
                    'time2': pd.to_datetime(['2018-07-16 20:00:00', '2018-07-11 12:03:00', 
                                             '2018-07-13 21:54:00', '2018-07-14 17:09:00', 
                                             '2018-07-20 04:21:00', '2018-07-21 09:00:00'])})
time1_date = tmp.time1.dt.date.astype(str)
tmp['rule18'], tmp['rule08'] = pd.to_datetime(time1_date + ' 18:00:00'), pd.to_datetime(time1_date + ' 08:00:00')
# if stop exceeds 18:00:00, compute time difference from this hour 
tmp['time_diff_rule1'] = np.where(tmp.time2 > tmp.rule18, (tmp.time2 - tmp.rule18), (tmp.time2 - tmp.time1))
# rearrange the dataframe with your second rule
tmp['time_diff_rule2'] = np.where((tmp.time2 < tmp.rule18) & (tmp.time1 > tmp.rule08), 0, tmp['time_diff_rule1'])

  time_diff_rule1    time_diff_rule2  
0 02:00:00           02:00:00  
1 04:00:00           00:00:00  
2 03:54:00           03:54:00  
3 04:00:00           00:00:00  
4 04:00:00           04:00:00  
5 15:00:00           15:00:00  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM