【问题标题】:Create a list which values based on existing DateTimeIndex创建一个基于现有 DateTimeIndex 值的列表
【发布时间】:2021-05-06 11:57:23
【问题描述】:

我从现有数据帧中获得了 DateTimeIndex

time=df.index[19:]

在一定的时间范围内,我想创造一定的价值

list=[]
for i in range(0,len(time)):
    #if time[i] in the range of '2020-06-25 11:53:05' to '2020-06-25 12:23:05': this part I don't know how
        correct.append(1)
    else:
        correct.append(0)

所以结果应该如下所示,在某个时间范围内,该值将为 1,而在其他时间范围内,它只是 0。

list= [0,0,0,0,1,1,1,0,0,0,0]

我不知道如何使用这种类型的数据索引,并且我已经搜索了多个工具来使用 DateTimeIndex,但找不到与解决我的案例相关的内容。并且范围应该与 DateTimeIndex (以秒为单位)精确,还是粗略的猜测仍然有效?例如,“2020-06-25 11:00:00”到“2020-06-25 12:00:00”

非常感谢您的帮助!自学并不容易,有时我什至不知道该找什么关键字。

【问题讨论】:

    标签: pandas numpy datetimeindex


    【解决方案1】:

    您可以检查索引是否大于范围的开头并且小于范围的结尾,在它们之间应用&并使用astype(int)转换为整数:

    # create sample index
    time = pd.DatetimeIndex(
        pd.date_range('2020-06-25 11:00:00', '2020-06-25 12:15:00', freq='10min'))
    
    # check if time within certain ranges
    z = ((time > '2020-06-25 11:53:05') & (time < '2020-06-25 12:23:05'))
    z |= ((time > '2020-06-25 10:00:00') & (time < '2020-06-25 11:20:00'))
    
    z.astype(int)
    

    输出:

    array([1, 1, 0, 0, 0, 0, 1, 1])
    

    附:在pandas 中,最好避免显式循环,只要您可以使用矢量化操作,因为它通常会严重影响性能

    【讨论】:

    • 请问为什么我们需要“freq='10min'”?非常感谢!
    • 我只是在这里创建一个示例数据,如果您已经有一个带有 DateTimeIndex 的 DataFrame,那么您当然不需要它。 10min 的选择具体是任意的,我希望没有太多的值,但范围内和范围外的值,所以我可以测试范围内的值产生 1,范围外的值产生 0s
    • 哦,是的,我现在明白了!如果我有超过 1 个范围,您能否提出解决方案?不幸的是,我刚刚检查了“时间”内的 2 个范围,但它只能使用 1 个范围
    • @mylearning 当然,更新了我的 2 个范围的答案,请查看是否有帮助
    • "|=" 对我来说是新的,谢谢!我从你身上学到了很多
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2021-09-17
    • 2015-01-30
    • 2020-12-14
    • 2015-03-10
    相关资源
    最近更新 更多