日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 计算时间重叠_Python基于时间信息(即时、间隔)计算项目之间的相似性...

發布時間:2025/3/13 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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基于时间信息(即时、间隔)计算项目之间的相似性...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。