【问题标题】:Time rounding and columns combining时间舍入和列组合
【发布时间】:2020-11-16 16:43:04
【问题描述】:

我有以下数据框:

'Customer_id': [1, 2, 1, 2, 1, 2, 3, 4, 4, 1, 2, 1, 2, 3, 4, 4, 2, 1, 3],
'order_time': ['2010-01-01 01:01:00', '2010-01-01 01:05:00' , '2010-01-01 01:24:00', '2010-01-01 01:27:00', '2010-01-01 01:33:00', '2010-01-01 01:34:00', '2010-01-01 01:35:00', '2010-01-01 01:37:00', '2010-01-01 01:38:00',  

'2010-01-13 05:52:00', '2010-01-13 05:53:00', '2010-01-13 05:54:00', '2010-01-13 05:58:00', '2010-01-13 06:04:00', '2010-01-13 06:14:00', '2010-01-13 06:25:00', '2010-01-13 06:024:00', '2010-01-13 06:26:00', '2010-01-13 06:27:00']})

无论日期如何,我都想只取整时间。

预期输出:

例如:

  1. 对于日期2010-01-01 01:01:00,我想创建一个包含四舍五入时间的列Round_10_min_start:01:00:00。还有一列 Round_10_min_end 包含四舍五入的时间:01:09:00 这意味着 10 分钟的范围,适用于所有其他用户。所以最后我得到每一行创建的列Round_combined包含:01:00:00-01:09:00范围0f 10分钟。 然后创建一个新列Freq_id,其中包含该时间段内每个用户的频率,以及该时间段内所有用户的另一个新列Total。例如id = 101:00:00-01:09:00期间仅存在一次,该期间的用户总数为2。

请看附件照片

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用-

    df['Round_10_min_start'] = df['order_time'].dt.floor('10min')
    df['Round_10_min_end'] = df['Round_10_min_start'] +  pd.Timedelta(minutes = 9)
    
    df['Round_combined'] = df['Round_10_min_start'].dt.strftime('%H:%M:%S') + '-' + df['Round_10_min_end'].dt.strftime('%H:%M:%S')
    
    df['Round_10_min_start'] = df['Round_10_min_start'].dt.time
    df['Round_10_min_end'] = df['Round_10_min_end'].dt.time
    
    df['Freq_id'] = df.groupby(['Customer_id', 'Round_combined'])['order_time'].transform('count')
    df['Total'] = df.groupby(['Round_combined'])['Customer_id'].transform('count')
    

    输出

        Customer_id order_time  Round_10_min_start  Round_10_min_end    Round_combined  Freq_id Total
    0   1   2010-01-01 01:01:00 01:00:00    01:09:00    01:00:00-01:09:00   1   2
    1   2   2010-01-01 01:05:00 01:00:00    01:09:00    01:00:00-01:09:00   1   2
    2   1   2010-01-01 01:24:00 01:20:00    01:29:00    01:20:00-01:29:00   1   2
    3   2   2010-01-01 01:27:00 01:20:00    01:29:00    01:20:00-01:29:00   1   2
    4   1   2010-01-01 01:33:00 01:30:00    01:39:00    01:30:00-01:39:00   1   5
    5   2   2010-01-01 01:34:00 01:30:00    01:39:00    01:30:00-01:39:00   1   5
    6   3   2010-01-01 01:35:00 01:30:00    01:39:00    01:30:00-01:39:00   1   5
    7   4   2010-01-01 01:37:00 01:30:00    01:39:00    01:30:00-01:39:00   2   5
    8   4   2010-01-01 01:38:00 01:30:00    01:39:00    01:30:00-01:39:00   2   5
    9   1   2010-01-13 05:52:00 05:50:00    05:59:00    05:50:00-05:59:00   2   4
    10  2   2010-01-13 05:53:00 05:50:00    05:59:00    05:50:00-05:59:00   2   4
    11  1   2010-01-13 05:54:00 05:50:00    05:59:00    05:50:00-05:59:00   2   4
    12  2   2010-01-13 05:58:00 05:50:00    05:59:00    05:50:00-05:59:00   2   4
    13  3   2010-01-13 06:04:00 06:00:00    06:09:00    06:00:00-06:09:00   1   1
    14  4   2010-01-13 06:14:00 06:10:00    06:19:00    06:10:00-06:19:00   1   1
    15  4   2010-01-13 06:25:00 06:20:00    06:29:00    06:20:00-06:29:00   1   4
    16  2   2010-01-13 06:24:00 06:20:00    06:29:00    06:20:00-06:29:00   1   4
    17  1   2010-01-13 06:26:00 06:20:00    06:29:00    06:20:00-06:29:00   1   4
    18  3   2010-01-13 06:27:00 06:20:00    06:29:00    06:20:00-06:29:00   1   4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多