亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將開始時間和結束時間作為過濾器應用于數據框

將開始時間和結束時間作為過濾器應用于數據框

九州編程 2023-04-25 17:50:30
我正在處理一個時間序列數據框,它看起來像這樣,并且包含從 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輸出應將所有不在開始和結束時間范圍內的值分配為零,并保留過濾器中指定的開始和結束時間的值。我嘗試對開始時間和結束時間同時應用兩個過濾器,但沒有用。任何幫助,將不勝感激。
查看完整描述

2 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

想法是在列表理解中創建所有掩碼Series.between,然后加入logical_orbynp.logical_or.reduce并最后傳遞給Series.where

print (df1)

? ? ? ? ? ? Timestamp? ? ?Value

0 2020-01-13 00:00:00 -68.95370 <- changed data for match

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

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

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

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

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


L = [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? ? Value

0 2020-01-13 00:00:00 -68.9537

1 2020-01-01 00:05:00? ?0.0000

2 2020-01-01 00:10:00? ?0.0000

3 2020-01-01 00:15:00? ?0.0000

4 2020-01-01 00:20:00? ?0.0000

5 2020-07-01 00:00:00? ?0.0000


查看完整回答
反對 回復 2023-04-25
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

使用合并方法和查詢的外部連接的解決方案:

print(df1)

? ? ? ? ? ? timestamp? ? ?Value <- changed Timestamp to timestamp to avoid name conflict in query

0 2020-01-13 00:00:00 -68.95370 <- also changed data for match

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

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

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

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

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


df1.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? ? Value

0 2020-01-13 00:00:00 -68.9537

1 2020-01-01 00:05:00? ?0.0000

2 2020-01-01 00:10:00? ?0.0000

3 2020-01-01 00:15:00? ?0.0000

4 2020-01-01 00:20:00? ?0.0000

5 2020-07-01 00:00:00? ?0.0000

鍵assign(key=0)被添加到兩個數據幀以產生笛卡爾積。


查看完整回答
反對 回復 2023-04-25
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號