下表代表较大的表格,按代码(第一栏)排序。对于每个id(4884,比方说),我想用相同的代码识别其他ID并且LOG_TIME下降 在[开始,结束]范围内(id = 4884,比方说)。然后,在所有这些条目中,我想计算最高价格。重复此过程 所有条目并输入结果作为最高价格新列。
换句话说:
对于数据中的每一行,计算所有其他条目的最高价格 在具有相同代码和重叠[开始,结束]范围的表中。
Code finish start LOG_TIME ID Price 2 01/03/13 17:53 20/02/13 11:54 20/02/13 11:54 4884 80.5 2 01/03/13 17:53 20/02/13 11:54 26/02/13 10:06 4884 80.5 2 01/03/13 17:53 20/02/13 11:54 01/03/13 10:53 4884 85.1 2 01/03/13 17:53 20/02/13 11:54 01/03/13 17:53 4884 85.1 2 15/04/13 12:26 05/03/13 12:36 05/03/13 12:36 4961 86.25 2 15/04/13 12:26 05/03/13 12:36 08/03/13 11:11 4961 90.85 2 15/04/13 12:26 05/03/13 12:36 11/03/13 10:40 4961 92 2 15/04/13 12:26 05/03/13 12:36 15/04/13 12:26 4961 92 2 15/04/13 12:26 05/03/13 12:36 09/06/13 17:00 4961 92 2 26/06/13 10:55 26/06/13 10:55 26/06/13 10:55 5410 80.5 2 26/06/13 10:55 26/06/13 10:55 26/06/13 10:55 5410 80.5 3 01/01/14 22:50 18/12/13 15:46 18/12/13 15:46 6102 80.5 3 01/12/20 00:00 23/12/13 10:21 23/12/13 10:21 6114 81.65 3 01/01/14 22:50 18/12/13 15:46 01/01/14 22:50 6102 83.95 3 01/01/14 22:50 18/12/13 15:46 01/01/14 22:50 6102 83.95 ….. …. …. …. …. ….
有没有办法在大型数据集上有效地执行此操作?我看不到用虚拟变量做这种方法的方法。也许唯一的方法是对每个条目的代码中的所有条目执行FOR循环,检查LOG_TIME是否在该范围内,然后计算最大价格。
我想知道是否有人能够看到这样做的聪明方法。任何帮助非常感谢!
答案 0 :(得分:0)
如果你正在使用pandas并假设日期是日期时间格式,你可以按'代码'进行分组,然后对其应用最小,最大函数。
假设df是你的数据帧,你会有类似的东西。
df.groupby('Code').apply(lambda x: min(x.LOG_TIME),max(x.LOG_TIME))
如果LOG_TIME不是日期时间格式,只需将其转换为:
import pandas as pd
df['LOG_TIME'] = pd.to_datetime(df.LOG_TIME)