有没有可能避免使用双for循环

2024-04-25 02:07:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须使用double for循环遍历数据,以将一行数据与其他行数据进行比较。每行我都要这样做。你知道吗

不幸的是,我的真实数据有数百万行长,而且循环要花很长时间才能处理。你知道吗

有没有办法避免使用双for循环?因为我只对比较Date1和date2中相似的东西感兴趣-我想我可以按东西分组,并将双for循环应用于每个组?你知道吗

但我不知道该怎么写,因为len(分组)有一个复杂的问题。还有很多行的'Quantity'=0,因此这些行不需要包含在计算中。事先谢谢你的帮助。你知道吗

    d={'Thing':['Thing1','Thing2','Thing1','Thing2','Thing5'],'Date1' : 
    ['01-01-2016','02-02-2015','03-03-2015','03-03-2015', '24-03-2016'], 'Date2' : ['04-04-2015','03-03-2014','05-04-2015','07-03-2015','03-04-2016'], 
    'Quantity':[1,1,1,1,0]}

    data=pd.DataFrame(d)

    data['Level']=0

    for i in range(0,len(data)):
        for j in range(i+1,len(data)):
            if data['Thing'][i] == data['Thing'][j] and data['Date1'][i] >= data['Date1'][j] 
            and data['Date1'][i] < data['Date2'][j] and data['Quantity']==1:
                data['Level'][i]=data['Level'][i]+1 
                data['Level'][j]=data['Level'][j]+1

Tags: and数据infordatalenrangelevel
1条回答
网友
1楼 · 发布于 2024-04-25 02:07:16

我会尝试执行自联接:

merged_data = data.merge(data, on='Thing', how='outer')

结果如下:

merged_data
      Date1_x     Date2_x  Quantity_x   Thing     Date1_y     Date2_y  \
0  01-01-2016  04-04-2015           1  Thing1  01-01-2016  04-04-2015   
1  01-01-2016  04-04-2015           1  Thing1  03-03-2015  05-04-2015   
2  03-03-2015  05-04-2015           1  Thing1  01-01-2016  04-04-2015   
3  03-03-2015  05-04-2015           1  Thing1  03-03-2015  05-04-2015   
4  02-02-2015  03-03-2014           1  Thing2  02-02-2015  03-03-2014   
5  02-02-2015  03-03-2014           1  Thing2  03-03-2015  07-03-2015   
6  03-03-2015  07-03-2015           1  Thing2  02-02-2015  03-03-2014   
7  03-03-2015  07-03-2015           1  Thing2  03-03-2015  07-03-2015   
8  24-03-2016  03-04-2016           0  Thing5  24-03-2016  03-04-2016   
   Quantity_y  
0           1  
1           1  
2           1  
3           1  
4           1  
5           1  
6           1  
7           1  
8           0  

那么文件管理器是您喜欢的:

merged_data[(...) & (...)]

相关问题 更多 >