我想做六列('ID', ' early ', 'Latest', ' diffence_hours ', ' diffence_minutes ', 'Serial')从这个部分数据aframe:
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”的最新信息, ' diffence_hours ': ' early '和'Latest'的时间戳差异, ' differences _minutes': ' early '和'Latest'之间的时间戳差异,以分钟为单位。 注意:'Serial'对于每个唯一的'ID'是常量 我知道我需要使用groupby和transform,但不知道如何确切地做到这一点。 问题来源StackOverflow 地址:/questions/59383332/groupby-id-with-timestamp-difference-and-maintaining-the-other-columns-in-pyth
这应该工作:
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
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。