2 回答

TA貢獻1836條經驗 獲得超3個贊
想法是在列表理解中創建所有掩碼Series.between
,然后加入logical_or
bynp.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

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)被添加到兩個數據幀以產生笛卡爾積。
添加回答
舉報