您可以只用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