分组'ID'具有时间戳差异并维护 Python 中的其他列



我想从这个部分数据帧中制作六列('ID'、'最早'、'最新'、'Difference_hours'、'Difference_minutes'、'串行'(:

ID    Timestamp        Serial
A     2019-01-01 00:01    F
A     2019-01-01 00:04    F
A     2019-01-01 00:06    F
B     2019-01-03 12:35    G
B     2019-01-01 13:35    G
.
.
.

部分所需输出为:

ID     Earliest            Latest            Difference_hours  Difference_minutes  Serial
A      2019-01-01 00:01    2019-01-01 00:06        0.083               5             F
A      2019-01-03 12:35    2019-01-04 13:35          1                 60            G
.
.
.

列说明:

"最早":来自同一"ID">

的最早时间戳,
"最新":来自同一"ID"的最新
时间戳,"Difference_hours":"最早"和"最新"之间的时间戳差异(以小时
为单位(,"Difference_minutes":"最早"和"最新"之间的时间戳差异(以分钟为单位(。

注意:"串行"对于每个唯一的"ID"都是恒定的

我知道我需要使用groupby,也许还有transform,但不知道如何做到这一点。

这应该有效:

问题

df = pd.DataFrame({'ID': ['A', 'A', 'A', 'B', 'B'],
'Timestamp': ['2019-01-01 00:01', '2019-01-01 00:04', 
'2019-01-01 00:06', '2019-01-03 12:35', '2019-01-04 13:35'],
'Serial': ['F', 'F', 'F', 'G', 'G']})
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
print(df)
ID           Timestamp Serial
0  A 2019-01-01 00:01:00      F
1  A 2019-01-01 00:04:00      F
2  A 2019-01-01 00:06:00      F
3  B 2019-01-03 12:35:00      G
4  B 2019-01-04 13:35:00      G

ans = df.groupby(['ID','Serial'])['Timestamp'].agg(['min','max']).reset_index()
ans['hr_diff'] = ans['max'].dt.hour - ans['min'].dt.hour
ans['min_diff'] = ans['max'].dt.minute - ans['min'].dt.minute
print(ans)
ID Serial                 min                 max  hr_diff  min_diff
0  A      F 2019-01-01 00:01:00 2019-01-01 00:06:00        0         5
1  B      G 2019-01-03 12:35:00 2019-01-04 13:35:00        1         0

如果你有熊猫> 0.25

ans = df.groupby(['ID','Serial'])['Timestamp'].agg(min='min',
max='max',
diff_hr=lambda x: x.max().hour - x.min().hour,
diff_min=lambda x: x.max().minute - x.min().minute
)
ans.reset_index()
ID Serial                 min                 max  diff_hr  diff_min
0  A      F 2019-01-01 00:01:00 2019-01-01 00:06:00        0         5
1  B      G 2019-01-03 12:35:00 2019-01-04 13:35:00        1         0

最新更新