【发布时间】:2017-11-17 04:29:45
【问题描述】:
我有一个产品,其中包含产品通过的步骤。
即数据结构为:
产品 ID、订单 ID、新值、旧值、编辑日期。
我想要产品通过我们系统过渡的时间差和累计时间总和(以天为单位)。即总循环时间和步间循环时间。
我编写了以下代码,它运行良好,但仍然很慢。我希望有人可以提供更快的解决方案,因为目前处理具有 4 亿个处理步骤的 YTD 数据集需要数小时。
def f(df):
df['diff'] = (df['Edit Date'].diff())/ np.timedelta64(1, 'D')
df['sum'] = df['diff'].cumsum()
print len(df)
return df
if __name__ == '__main__':
df = pd.read_csv('May 2017.csv')
df['Edit Date'] = pd.to_datetime(df['Edit Date'], format='%m/%d/%Y')
df.sort_values(by=['Order ID','Edit Date',] ,kind = 'mergesort', ascending=[1,1], inplace=True)
df= df.groupby(['Order ID'])
timediffference = df.apply(f)
这给了我我想要的东西,但它在大型数据集上速度很慢,在一个缓慢的月份通常会超过 2000 万行。想知道是否有一种方法可以更快地针对每个订单步骤组的整个日期列执行此操作,而不是尝试使用 apply。我尝试使用多核,但发现死路一条。
【问题讨论】: