我有一个包含4个属性的数据集:
- 一个名为“ id”(整数)的id属性
-
一个名为“ group”(整数)的属性
-
录取时间称为“ aankomstdt”(日期时间)
-
放电时间称为“ ontslagdt”(日期时间)
数据集如下:
id group aankomstdt ontslagdt
1 A Thu Nov 14 04:31:00 CET 2019 Thu Nov 14 09:43:00 CET 2019
2 A Thu Nov 14 05:38:00 CET 2019 Thu Nov 14 06:19:00 CET 2019
3 A Thu Nov 14 05:52:00 CET 2019 Thu Nov 14 09:14:00 CET 2019
4 A Thu Nov 14 05:54:00 CET 2019 Thu Nov 14 10:02:00 CET 2019
5 B Thu Nov 14 06:06:00 CET 2019 Thu Nov 14 11:22:00 CET 2019
我想计算同时被承认的例子的数量。因此,新的属性应向我提供在他/她的入院时间范围内每个患者(id)的入院患者数。 我创建了以下工作代码:
import pandas as pd
import numpy as np
from datetime import datetime
admission_time = "aankomstdt"
discharge_time = "ontslagdt"
group = 'group'
date_format = '%Y-%m-%d %H:%M:%S'
path = 'D:/Lionel/Formations_DataScience/Rapidminer/Tests_Rapidminer/count_overlaps_sven.xlsx'
def convert_to_datetime(a) :
a = datetime.strptime(str(a),date_format)
return a
def interval_overlaps(a,b):
return min(a[discharge_time],b[discharge_time]) - max(a[admission_time],b[admission_time]) > np.timedelta64(-1)
def count_overlaps(df1):
return pd.Series([df1.apply(lambda x: interval_overlaps(x,df1.iloc[i]),axis=1).sum() - 1 for i in range(len(df1))],df1.index)
#return pd.Series([df1.apply(lambda x: interval_overlaps(x,axis=1).sum() - 1 for i in range(len(df1))])
def rm_main():
data = pd.read_excel(path)
data[admission_time] = data[admission_time].apply(convert_to_datetime)
data[discharge_time] = data[discharge_time].apply(convert_to_datetime)
data["count"] = data.groupby(group).apply(count_overlaps).values
return data
但是我的原始数据集有大约7万个示例,因此我估计计算时间约为1个月(24h / 24)。 我的问题是:Python中是否有解决方案可以大大加速该算法?
谢谢