Python 如何通过比较两列(达到值的时间间隔)从不同列检索值?

Python 如何通过比较两列(达到值的时间间隔)从不同列检索值?,python,pandas,Python,Pandas,我有以下数据框: id date PRC 52wh 0 1 01/02/2010 1.0 1.0 1 1 01/03/2010 2.0 2.0 2 1 01/04/2010 10.0 10.0 3 1 01/05/2010 2.0 10.0 4 1 01/06/2010 0.5 10.0 5 1 01/07/2010 3.0 10.0 6 1 01/08/201

我有以下数据框:

    id    date      PRC    52wh
0   1   01/02/2010  1.0     1.0
1   1   01/03/2010  2.0     2.0
2   1   01/04/2010  10.0   10.0
3   1   01/05/2010  2.0    10.0
4   1   01/06/2010  0.5    10.0
5   1   01/07/2010  3.0    10.0
6   1   01/08/2010  5.0    10.0
7   1   01/09/2010  5.0    10.0
8   1   01/10/2010  7.0    10.0
9   1   01/11/2010  1.0    10.0
10  1   01/12/2010  3.0    10.0
11  2   01/02/2010  4.0    4.0
12  2   01/03/2010  5.0    5.0
13  2   01/04/2010  1.0    5.0
14  2   01/05/2010  2.0    5.0
15  2   01/06/2010  3.0    5.0
16  2   01/55/2055  4.0    3.0
我需要做的是在每一行中创建一列,检索52wh等于价格的日期。因此,只要当前行中的52 wh高于当前行中的PRC,程序就会回顾检查52wh等于PRC的时间。 所需的输出如下:

   id     date      PRC     52wh    date_y  
2   1   01/02/2010  1.0     1.0     01/02/2010  
5   1   01/03/2010  2.0     2.0     01/03/2010  
6   1   01/04/2010  10.0    10.0    01/04/2010  
7   1   01/05/2010  2.0     10.0    01/04/2010  
8   1   01/06/2010  0.5     10.0    01/04/2010  
9   1   01/07/2010  3.0     10.0    01/04/2010  
10  1   01/08/2010  5.0     10.0    01/04/2010  
11  1   01/09/2010  5.0     10.0    01/04/2010  
12  1   01/10/2010  7.0     10.0    01/04/2010  
13  1   01/11/2010  1.0     10.0    01/04/2010  
14  1   01/12/2010  3.0     10.0    01/04/2010  
16  2   01/02/2010  4.0     4.0     01/02/2010  
17  2   01/03/2010  5.0      5.0    01/03/2010  
20  2   01/04/2010  1.0     5.0     01/03/2010  
23  2   01/05/2010  2.0     5.0     01/03/2010  
26  2   01/06/2010  3.0     5.0     01/03/2010
29  2   01/55/2055  4.0     3.0     01/06/2010
为此,我已经实现了执行此任务的以下代码:

df = df_v1
df['uid'] = df.index
df_desc = df.sort_values('uid', ascending=False)

result = df.merge(df_desc[['PRC','date','uid']], left_on="52wh", right_on="PRC", how="left", suffixes=['', '_y']).drop(columns=['PRC_y'])
highest_uid = result[result.uid >= result.uid_y]
final_result = highest_uid.groupby('uid').head(1)
问题是,我需要在一个至少250MB的csv文件的大数据集上运行它,而这段代码占用的内存太多。我有一个记忆错误,似乎什么都不工作。将文件划分为更小的样本不是一个选项。更改数据类型也不起作用

有人能帮我优化一下这个,让它在一个超过500万行的大文件上运行吗?理想情况下,它可以运行在一个超过300亿行的服务器上:)或者至少是几十亿行。我只有16GB的RAM内存

使小数据框工作的代码是:

import pandas as pd
import numpy as np

df_v1 = pd.DataFrame(data=np.array([[1, '01/02/2010'], [1, '01/03/2010'], [1, '01/04/2010'], [1, '01/05/2010'], [1, '01/06/2010'], [1, '01/07/2010'], [1, '01/08/2010'], [1, '01/09/2010'], [1, '01/10/2010'], [1, '01/11/2010'], [1, '01/12/2010'], [2, '01/02/2010'], [2, '01/03/2010'], [2, '01/04/2010'], [2, '01/05/2010'], [2, '01/06/2010'], [2, '01/07/2010']]), 
columns=['id', 'date'])
df_v1['PRC']=1,2,10,2,0.5,3,5,5,7,1,3,4,5,1,2,3,4
df_v1['52wh']=1,2,10,10,10,10,10,10,10,10,10,4,5,5,5,5,3
df_v1 = df_v1.astype({'PRC': 'float64', '52wh': 'float64'})

真希望有人能帮我解决这个问题!!提前谢谢各位

在带有10 mil线路的df上使用此代码需要几分钟才能运行

prc_date_dict = dict()

def a(row):
    # update the date value for the most recent PRC
    prc_date_dict[row['PRC']] = row['date']
    # get the date of the PRC that equals row 52wh
    return prc_date_dict[row['52wh']]

df['date_y'] = df.apply(a, axis=1)

编辑:删除冗余,如果,可能运行得更快

如果没有与当前行52wh相等的前PRC,则在日期中输入什么?这不能是这种情况,因为52wh是根据前一个实例的最大PRC计算的。我有一个使用dict和apply函数的解决方案,该函数与随机生成的df一起工作。它不使用其他函数,因此效率不高,但不会引起内存错误。我测试了10英里的线路,用了6分钟。这是你需要的解决方案吗?你能在这里分享吗?这样我就可以检查它是否适合我了?谢谢非常感谢你!它很好用。你救了我一天!:)不客气!如果这是你想要的,你能接受这个答案吗?是的,对不起,我是平台上的新手!完成:))