【问题标题】:Group by and add new column with min value between dates - pandas按日期分组并添加具有最小值的新列 - 熊猫
【发布时间】:2021-09-29 14:23:53
【问题描述】:

我有这个 Pandas 数据框:

我想要一个新的 DF 按 ['ticked_id','time_a'] 对它们进行分组,并添加一个具有最小时间差 (hh) 的新列,SQL 代码有效:

SELECT ticket_id, DATEDIFF('hh', time_a, MIN(time_b)) each_diff from ...

我尝试对它们进行分组,但结果是一个我看不到的对象

【问题讨论】:

    标签: python sql pandas dataframe pandas-groupby


    【解决方案1】:

    对于

    df = pd.DataFrame({
        'ticket_id': [1, 2, 2],
        'time_a': ['2021-07-21 12:00:01', '2021-07-21 12:00:01', '2021-07-21 12:00:01'],
        'time_b': ['2021-07-21 14:00:02', '2021-07-21 13:00:05', '2021-07-21 17:00:10']
    })
    df.time_a = pd.to_datetime(df.time_a)
    df.time_b = pd.to_datetime(df.time_b)
    
       ticket_id              time_a              time_b
    0          1 2021-07-21 12:00:01 2021-07-21 14:00:02
    1          2 2021-07-21 12:00:01 2021-07-21 13:00:05
    2          2 2021-07-21 12:00:01 2021-07-21 17:00:10
    

    这个

    df = df.groupby(['ticket_id', 'time_a'], as_index=False).agg(time_b_min=('time_b', 'min'))
    df['diff'] = df.time_b_min - df.time_a
    

    给你

       ticket_id              time_a          time_b_min            diff
    0          1 2021-07-21 12:00:01 2021-07-21 14:00:02 0 days 02:00:01
    1          2 2021-07-21 12:00:01 2021-07-21 13:00:05 0 days 01:00:04
    

    【讨论】:

    • 有效!喜欢这个解决方案:)。不知道你可以添加一个 groupy,谢谢!!!
    【解决方案2】:

    要将数据分组并获得具有time_b 列的最短日期的列,您可以这样做:

    df_grouped = df.groupby(['ticket_id', 'time_a'])['time_b'].min().reset_index()
    

    我不知道您的 time_atime_b 列的数据类型,但如果它们是时间戳,您可以执行以下操作以获得小时数的差异:

    df_grouped['each_diff'] = (df_grouped['time_b'] - df_grouped['time_a').astype('timedelta64[h]')
    

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      相关资源
      最近更新 更多