您可以只用np.timedelta64(1, 'S' 分裂timedelta64 )以秒爲單位獲得增量。如果你真的想擺脫微秒級的精度,只需將其舍入到0位數併除以3600即可得到小時數的增量。
實際上,只有例子的倒數第二行是相關的,其餘的是設置數據幀。 (我改變了第二行有更精確的東西,我可以四捨五入)。
import pandas as pd
import numpy as np
data = [{'ID': 'X', 'Timestamp': '2014-12-15 00:00:00', 'Quantity': 4},
{'ID': 'X', 'Timestamp': '2014-12-15 01:25:00.435', 'Quantity': 7},
{'ID': 'X', 'Timestamp': '2014-12-15 02:00:00', 'Quantity': 5},
{'ID': 'X', 'Timestamp': '2014-12-15 03:00:00', 'Quantity': 5},
{'ID': 'X', 'Timestamp': '2014-12-15 04:00:00', 'Quantity': 0},
{'ID': 'Y', 'Timestamp': '2014-12-15 00:00:00', 'Quantity': 9},
{'ID': 'Y', 'Timestamp': '2014-12-15 01:00:00', 'Quantity': 1},
{'ID': 'Y', 'Timestamp': '2014-12-15 02:00:00', 'Quantity': 3},
{'ID': 'Y', 'Timestamp': '2014-12-15 03:00:00', 'Quantity': 2},
{'ID': 'Y', 'Timestamp': '2014-12-15 04:00:00', 'Quantity': 7},
]
df = pd.DataFrame(data)
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df['time_diff'] = df.groupby('ID')['Timestamp'].diff()
df['hour_diff'] = (df['time_diff']/np.timedelta64(1, 's')).round(0)/3600
print(df)
輸出:
ID Quantity Timestamp time_diff hour_diff
0 X 4 2014-12-15 00:00:00.000 NaT NaN
1 X 7 2014-12-15 01:25:00.435 01:25:00.435000 1.416667
2 X 5 2014-12-15 02:00:00.000 00:34:59.565000 0.583333
3 X 5 2014-12-15 03:00:00.000 01:00:00 1.000000
4 X 0 2014-12-15 04:00:00.000 01:00:00 1.000000
5 Y 9 2014-12-15 00:00:00.000 NaT NaN
6 Y 1 2014-12-15 01:00:00.000 01:00:00 1.000000
7 Y 3 2014-12-15 02:00:00.000 01:00:00 1.000000
8 Y 2 2014-12-15 03:00:00.000 01:00:00 1.000000
9 Y 7 2014-12-15 04:00:00.000 01:00:00 1.000000
謝謝!您的建議對於問題中報告的數據幀完美適用,只需稍加添加/修改: deltas = df ['time_diff']; deltas_hours = deltas.dt.days * 24.0 + deltas.dt.seconds/3600.0; df ['hours_diff'] = deltas_hours; p.s.對不起,遲到的迴應,我在這裏很新,並沒有期待這樣一個及時和有用的答案。再次感謝! – sobes