【问题标题】:how to bin unix timestamp time into 10 minutes interval?如何将 unix 时间戳时间分成 10 分钟间隔?
【发布时间】:2025-12-21 03:45:06
【问题描述】:

我有这样的数据,

         ID     datetime           
0         2  2015-01-09 19:05:39   
1         1  2015-01-10 20:33:38   
2         1  2015-01-10 21:10:00 

我已将此日期时间转换为 unix 时间戳

         ID   timestamp           
0         2  1420830339
1         1  1420922018   
2         1  1420924200 

我想先将 unix 时间戳转换为 EST 标准,然后将每一行分成 10 分钟的间隔。我需要一个列来指示该行属于哪个 bin。

我的最小日期时间是 2015-01-01 00:00:00,我只有 2015 年 1 月 1 日到 31 日的数据。

如何使用 python 或 pandas 实现这一点。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    使用date_rangecut 将分箱时间缩短10 分钟:

    df['datetime'] = pd.to_datetime(df['datetime'])
    
    bins = pd.date_range('2015-01-01', '2015-02-01', freq='10T')
    df['bins'] = pd.cut(df['datetime'], bins)
    df['lab'] = pd.cut(df['datetime'], bins, labels=False)
    
    df['bins_left'] = pd.IntervalIndex(pd.cut(df['datetime'], bins)).left
    df['bins_right'] = pd.IntervalIndex(pd.cut(df['datetime'], bins)).right
    
    df['bins_left_unix'] =  df['bins_left'].to_numpy().astype(np.int64) // 10**9
    df['bins_right_unix'] = df['bins_right'].to_numpy().astype(np.int64) // 10**9
    
    print (df)
       ID            datetime                                        bins   lab  \
    0   2 2015-01-09 19:05:39  (2015-01-09 19:00:00, 2015-01-09 19:10:00]  1266   
    1   1 2015-01-10 20:33:38  (2015-01-10 20:30:00, 2015-01-10 20:40:00]  1419   
    2   1 2015-01-10 21:10:00  (2015-01-10 21:00:00, 2015-01-10 21:10:00]  1422   
    
                bins_left          bins_right  bins_left_unix  bins_right_unix  
    0 2015-01-09 19:00:00 2015-01-09 19:10:00      1420830000       1420830600  
    1 2015-01-10 20:30:00 2015-01-10 20:40:00      1420921800       1420922400  
    2 2015-01-10 21:00:00 2015-01-10 21:10:00      1420923600       1420924200  
    

    【讨论】:

    • 我忘了说我需要一列来表明这一行也属于哪个十箱。更新了问题。
    • @user_12 - 你能添加预期的输出吗?
    • 让我解释一下。如果我有一个日期时间 2015-01-01 00:00:00 到日期时间 2015-01-01 00:10:00 这些行之间的时间应该属于第一个 bin,然后是 2015-01-01 00:10: 00 到 2015-01-01 00:20:00 属于另一个 bin。我需要 [0, 1...] 表示 bin,
    • 谢谢。让我用我的原始数据检查一下。
    • @user_12 - why are dividing it by 109? * - 因为默认值为 ns - 纳秒