[英]determine the coordinates where two pandas time series cross, and how many times the time series cross
[英]How to determine if two pandas Series are within a given time interval
我有 2 pandas.Series
帶有日期時間數據類型的pandas.Series
。
第一個系列: ['2017-12-31 16:00:00-08:00', '2017-12-31 17:00:00-08:00', '2017-12-31 18:00:00-08:00']
第二系列: ['2017-12-31 17:00:00-08:00', None, '2017-12-31 18:00:10-08:00']
我想檢查兩個系列是否符合以下條件:
預期輸出: [False, True, True]
def date_check(x, y):
return (np.abs(x - y)) > timedelta(minutes=10)
它遇到錯誤: unsupported operand type(s) for -: 'DatetimeIndex' and 'NoneType'
pandas.Series
已轉換為datetime
格式,它們將不包含None
,它們將包含NaT
,這讓我想到, Series
未格式化為datetime
對象。pandas.DataFrame
pandas.to_datetime
將列轉換為日期pandas.to_datetime
.fillna
在b
列上,這將確保時間差 < 10 分鍾None
,用pandas.Timedelta(0)
填充它們import pandas as pd
import numpy as np
from datetime import timedelta
a = ['2017-12-31 16:00:00-08:00', '2017-12-31 17:00:00-08:00', '2017-12-31 18:00:00-08:00', None]
b = ['2017-12-31 17:00:00-08:00', None, '2017-12-31 18:00:10-08:00', None]
# dataframe
df = pd.DataFrame({'a': a, 'b': b})
# convert columns to datetime format
df[['a', 'b']] = df[['a', 'b']].apply(pd.to_datetime)
a b
0 2017-12-31 16:00:00-08:00 2017-12-31 17:00:00-08:00
1 2017-12-31 17:00:00-08:00 NaT
2 2017-12-31 18:00:00-08:00 2017-12-31 18:00:10-08:00
3 NaT NaT
# fillna in column b with values from column a
df.b = df.b.fillna(df.a)
# if both columns are None, fillna with Timedelta(0)
df[['a', 'b']] = df[['a', 'b']].fillna(pd.Timedelta(0))
a b
0 2017-12-31 16:00:00-08:00 2017-12-31 17:00:00-08:00
1 2017-12-31 17:00:00-08:00 2017-12-31 17:00:00-08:00
2 2017-12-31 18:00:00-08:00 2017-12-31 18:00:10-08:00
3 0 days 00:00:00 0 days 00:00:00
# function
def date_check(x, y):
return (np.abs(x - y)) < timedelta(minutes=10)
# function call
date_check(df.a, df.b)
[out]:
0 False
1 True
2 True
3 True
dtype: bool
# add a column to the dataframe
df['time_diff'] = np.abs(df.a - df.b) < pd.Timedelta(minutes=10)
a b time_diff
0 2017-12-31 16:00:00-08:00 2017-12-31 17:00:00-08:00 False
1 2017-12-31 17:00:00-08:00 2017-12-31 17:00:00-08:00 True
2 2017-12-31 18:00:00-08:00 2017-12-31 18:00:10-08:00 True
3 0 days 00:00:00 0 days 00:00:00 True
它無法對NoneTypes
執行操作,因此只需使用 try/except 塊單獨處理。
def date_check(x, y):
try:
return (np.abs(x - y)) > timedelta(minutes=10)
except:
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.