所以我基本上有2个csv文件:
1)Stamps.csv(800行)
[id (int64), start date (datetime64[ns]), end
date (datetime64[ns])]
2)Data.csv(360 000行)[date time(datetime64[ns])]
Stamps.csv中的所有条目都有唯一的开始日期和结束日期间隔。我将它们加载到2个数据帧中
df=pd.read_csv(Stamps.csv)
df2=pd.read_csv(Data.csv)
并尝试根据日期时间字段将df2中的条目与df中的条目进行匹配;这样如果df2的“日期时间”值在一个间隔之间,那么从df给它一个id。 现在我试图这样做:
for index2, row2 in df2.iterrows(): #for every entry in the Data.csv
for index, row in df.iterrows(): #for every entry in Stamp.csv
if(row['StartDateTime']<=row2['Datetime']<=row['StopDateTime']): #if the date from Data.csv is between 2 intervals from Stamp.csv
df2['JobRef']=row['JobRef'] #give the id from Stamp.csv to the entry from Data.csv
break
df.to_csv(path_or_buf=path, sep=';', index=False)
我得到了想要的结果,但是处理需要很长时间(第一次运行需要3个小时)。有没有办法更快地做到这一点?
P.S。我也试过多线程for循环,但它仍然需要很长时间才能执行。
答案 0 :(得分:0)
结束这样做,感谢chris dorn发布答案:
import pandasql as ps
sqlcode = '''
select df2.*, df.JobRef
from df
inner join df2
on df2.Datetime between df.StartDateTime and df.StopDateTime
'''
df2 = ps.sqldf(sqlcode,locals())
工作得非常快。