【问题标题】:Create identical timestamp for each n elements为每 n 个元素创建相同的时间戳
【发布时间】:2020-04-21 20:46:38
【问题描述】:

我有一个函数可以创建一个包含 100.000 个时间戳的人工列表,可以追溯到过去。频率为2分钟。

datelist = pd.date_range(end = pd.datetime.today(), periods=100000, freq='2min00S').tolist()

结果如下:

[Timestamp('2018-12-03 19:48:35.874707', freq='2T'),
 Timestamp('2018-12-03 19:50:35.874707', freq='2T'),
 Timestamp('2018-12-03 19:52:35.874707', freq='2T'),
 Timestamp('2018-12-03 19:54:35.874707', freq='2T'),
 Timestamp('2018-12-03 19:56:35.874707', freq='2T'),
 Timestamp('2018-12-03 19:58:35.874707', freq='2T'),
 Timestamp('2018-12-03 20:00:35.874707', freq='2T'),
 Timestamp('2018-12-03 20:02:35.874707', freq='2T'),
 Timestamp('2018-12-03 20:04:35.874707', freq='2T'),
 Timestamp('2018-12-03 20:06:35.874707', freq='2T'),
...]

我想为每 50 个元素创建一个相同的时间戳。 目前,我对每 100.000 个元素都有不同的时间戳。有什么想法吗?

换句话说:2 分钟的频率保持不变,但每 50 个元素的时间戳相同。

这个最终列表将作为新列集成到 pandas 数据框中。

data_pd['Timestamp'] = datelist

【问题讨论】:

    标签: python pandas list numpy timestamp


    【解决方案1】:

    我相信您需要在删除tolist() 后按数组索引DatetimeIndex,并将50 的整数除以numpy.arange 按DataFrame 的长度:

    dates = pd.date_range(end = pd.datetime.today(), periods=100000, freq='2min00S')
    data_pd['Timestamp'] = dates[np.arange(len(data_pd)) // 50]
    

    样本:(每5个值)

    dates = pd.date_range(end = pd.datetime.today(), periods=100000, freq='2min00S')
    data_pd = pd.DataFrame({'a':range(10)})
    data_pd['Timestamp'] = dates[np.arange(len(data_pd)) // 5]
    
    print (data_pd)
       a                  Timestamp
    0  0 2019-08-17 13:20:41.002125
    1  1 2019-08-17 13:20:41.002125
    2  2 2019-08-17 13:20:41.002125
    3  3 2019-08-17 13:20:41.002125
    4  4 2019-08-17 13:20:41.002125
    5  5 2019-08-17 13:22:41.002125
    6  6 2019-08-17 13:22:41.002125
    7  7 2019-08-17 13:22:41.002125
    8  8 2019-08-17 13:22:41.002125
    9  9 2019-08-17 13:22:41.002125
    

    【讨论】:

    • 这正是我想要的。很好。非常感谢!
    【解决方案2】:
    end_time = pd.datetime.today()
    end_date = end_time.date()
    datelist = pd.date_range(end = end_date, periods=100000, freq='2min00S').tolist()
    

    将 end_time 转换为日期,而不是使用带小数秒的时间。这将始终为您提供相同的时间

    [Timestamp('2019-08-17 02:42:00', freq='2T'),
     Timestamp('2019-08-17 02:44:00', freq='2T'),
     Timestamp('2019-08-17 02:46:00', freq='2T'),
     Timestamp('2019-08-17 02:48:00', freq='2T'),
     Timestamp('2019-08-17 02:50:00', freq='2T'),
     Timestamp('2019-08-17 02:52:00', freq='2T'),
     Timestamp('2019-08-17 02:54:00', freq='2T'),
     Timestamp('2019-08-17 02:56:00', freq='2T'),
     Timestamp('2019-08-17 02:58:00', freq='2T'),
     Timestamp('2019-08-17 03:00:00', freq='2T'),
     Timestamp('2019-08-17 03:02:00', freq='2T'),
     Timestamp('2019-08-17 03:04:00', freq='2T'),
     Timestamp('2019-08-17 03:06:00', freq='2T'),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2016-03-11
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多