python 计算时间重叠_Python基于时间信息(即时、间隔)计算项目之间的相似性...
我想根據時間信息計算項目(0,1,2,3….)之間的相似性。時間信息可以是時間即時(startdate)、時間間隔(startdate、enddate)或null(NaT);請參閱下面的dataframe(df_for)的示例。在
{instant,instant}:如果等于sim=1,則sim=0
{instant,null}或相反,sim=0
{instant,interval}:如果instant在interval內,sim=1,或者如果一個interval包含一個instant,sim=1
{interval,interval}:如果區間重疊,sim=兩個區間的交集/兩個區間的并集
{interval,interval}:如果一個間隔包含另一個,則sim=1
下面的python代碼從dataframe獲取時態信息,并執行上述條件(1-5)。代碼很冗長,我想知道是否有一種聰明的方法/lib來使用python計算時間段和時間瞬間之間的相似性。在m, k = df_for.shape
sim = np.zeros((m, m))
data = df_for.values
for i in range(m):
for j in range(m):
if i != j:
st1 = data[i][0]
ed1 = data[i][1]
st2 = data[j][0]
ed2 = data[j][1]
#both items are null values
if pd.isnull(st1) and pd.isnull(ed1) and pd.isnull(st2) and pd.isnull(ed2):
sim[i][j] = 0.
# {instant, instant} => equal, not equal
if pd.notnull(st1) and pd.isnull(ed1) and pd.notnull(st2) and pd.isnull(ed2):
if st1 == st2:
sim[i][j] = 1.
else:
sim[i][j] = 0.
# {instant, null} => sim is 0
if pd.notnull(st1) and pd.isnull(ed1) and pd.isnull(st2) and pd.isnull(ed2):
sim[i][j] = 0.
# {instant, interval} => meets, during
if pd.notnull(st1) and pd.isnull(ed1) and pd.notnull(st2) and pd.notnull(ed2):
if(st2 <= st1 <= ed2):
sim[i][j] = 1. #a time is between two other times
else:
sim[i][j] = 0.
# {interval, instant} => meets, contains
if pd.notnull(st1) and pd.notnull(ed1) and pd.notnull(st2) and pd.isnull(ed2):
if(st1 <= st2 <= ed1):
sim[i][j] = 1. #a time is between two other times
else:
sim[i][j] = 0.
# {interval, interval} => equal, overlaps, not overlaps
if pd.notnull(st1) and pd.notnull(ed1) and pd.notnull(st2) and pd.notnull(ed2):
if (st1 <= st2 <= ed1) or (st2 <= st1 <= ed2):
intersect = min(ed1,ed2)- max(st1,st2) # earliestend-lateststart
union = max(st1,st2,ed1,ed2) - min(ed1,ed2,st1,st2)
overlaps = intersect/union
#print(intersect/np.timedelta64(1, 'D'),union/np.timedelta64(1, 'D'))
if (st1 > st2 and ed1 < ed2) or (st1 < st2 and ed1 > ed2): # contains, during
overlaps = 1.0
sim[i][j]=overlaps
else:
sim[i][j] = 0.
else:
sim[i][j] = 1.
總結
以上是生活随笔為你收集整理的python 计算时间重叠_Python基于时间信息(即时、间隔)计算项目之间的相似性...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pysparkpython版本_pysp
- 下一篇: websocket python爬虫_p