在Pandas中按ID-A、ID-B分组,统计ID-C数量及时间起止值
Pandas分组统计实现方案
步骤说明:
- 转换时间列类型:先将
Time列转为datetime类型,确保后续取最小/最大时间的逻辑正确(字符串类型的时间排序可能不符合预期)。 - 分组聚合:按
ID-A和ID-B分组,对ID-C统计数量,对Time分别取最小(start_time)和最大(end_time)值。 - 格式化时间(可选):如果需要将结果中的时间转回原字符串格式,可通过
strftime方法处理。
完整代码示例:
import pandas as pd # 构造原始DataFrame data = { 'ID-A': [1, 1, 1, 2, 2, 2], 'ID-B': ['A', 'A', 'A', 'B', 'C', 'C'], 'ID-C': ['X', 'X', 'Y', 'Y', 'Y', 'Y'], 'Time': ['2022/01/01 09:00:00', '2022/01/01 09:10:00', '2022/01/02 10:15:00', '2022/01/01 11:45:00', '2022/01/01 01:00:00', '2022/01/01 12:00:00'] } df = pd.DataFrame(data) # 转换Time列为datetime类型 df['Time'] = pd.to_datetime(df['Time']) # 分组聚合 result = df.groupby(['ID-A', 'ID-B']).agg( Value=('ID-C', 'count'), start_time=('Time', 'min'), end_time=('Time', 'max') ).reset_index() # 可选:将时间转回原字符串格式 result['start_time'] = result['start_time'].dt.strftime('%Y/%m/%d %H:%M:%S') result['end_time'] = result['end_time'].dt.strftime('%Y/%m/%d %H:%M:%S') print(result)
输出结果:
ID-A ID-B Value start_time end_time 0 1 A 3 2022/01/01 09:00:00 2022/01/02 10:15:00 1 2 B 1 2022/01/01 11:45:00 2022/01/01 11:45:00 2 2 C 2 2022/01/01 01:00:00 2022/01/01 12:00:00
内容的提问来源于stack exchange,提问作者MemeFast King
相关产品推荐
相关产品推荐

