将开始时间和结束时间作为过滤器应用于数据框

我正在处理一个时间序列数据框,它看起来像这样,并且包含从 2020 年 1 月到 2020 年 8 月的数据。


    Timestamp            Value

    2020-01-01 00:00:00 -68.95370

    2020-01-01 00:05:00 -67.90175

    2020-01-01 00:10:00 -67.45966

    2020-01-01 00:15:00 -67.07624

    2020-01-01 00:20:00 -67.30549

    .....

    2020-07-01 00:00:00 -65.34212

我正在尝试使用下面数据框中的 start_time 和 end_time 列对前一个数据帧应用过滤器:


  start_time            end_time

 2020-01-12 16:15:00 2020-01-13 16:00:00

 2020-01-26 16:00:00 2020-01-26 16:10:00

 2020-04-12 16:00:00 2020-04-13 16:00:00

 2020-04-20 16:00:00 2020-04-21 16:00:00

 2020-05-02 16:00:00 2020-05-03 16:00:00

输出应将所有不在开始和结束时间范围内的值分配为零,并保留过滤器中指定的开始和结束时间的值。我尝试对开始时间和结束时间同时应用两个过滤器,但没有用。


任何帮助,将不胜感激。


九州编程
浏览 115回答 2
2回答

米脂

想法是在列表理解中创建所有掩码Series.between,然后加入logical_orbynp.logical_or.reduce并最后传递给Series.where:print (df1)            Timestamp     Value0 2020-01-13 00:00:00 -68.95370 <- changed data for match1 2020-01-01 00:05:00 -67.901752 2020-01-01 00:10:00 -67.459663 2020-01-01 00:15:00 -67.076244 2020-01-01 00:20:00 -67.305495 2020-07-01 00:00:00 -65.34212L = [df1['Timestamp'].between(s, e) for s, e in df2[['start_time','end_time']].values]m = np.logical_or.reduce(L)df1['Value'] = df1['Value'].where(m, 0)print (df1)            Timestamp    Value0 2020-01-13 00:00:00 -68.95371 2020-01-01 00:05:00   0.00002 2020-01-01 00:10:00   0.00003 2020-01-01 00:15:00   0.00004 2020-01-01 00:20:00   0.00005 2020-07-01 00:00:00   0.0000

POPMUISE

使用合并方法和查询的外部连接的解决方案:print(df1)            timestamp     Value <- changed Timestamp to timestamp to avoid name conflict in query0 2020-01-13 00:00:00 -68.95370 <- also changed data for match1 2020-01-01 00:05:00 -67.901752 2020-01-01 00:10:00 -67.459663 2020-01-01 00:15:00 -67.076244 2020-01-01 00:20:00 -67.305495 2020-07-01 00:00:00 -65.34212df1.loc[df1.index.difference(df1.assign(key=0).merge(df2.assign(key=0), how = 'outer')\           .query("timestamp >= start_time and timestamp < end_time").index),"Value"] = 0结果:            timestamp    Value0 2020-01-13 00:00:00 -68.95371 2020-01-01 00:05:00   0.00002 2020-01-01 00:10:00   0.00003 2020-01-01 00:15:00   0.00004 2020-01-01 00:20:00   0.00005 2020-07-01 00:00:00   0.0000键assign(key=0)被添加到两个数据帧以产生笛卡尔积。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python