开发者社区> 问答> 正文

Groupby 'ID'具有时间戳差异,并在Python中维护其他列

我想做六列('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

展开
收起
kun坤 2019-12-27 10:28:10 508 0
1 条回答
写回答
取消 提交回答
  • 这应该工作:

    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
    
    2019-12-27 10:28:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载