Pandas groupby和transform需要很长时间

时间:2018-04-05 17:58:30

标签: python pandas dataframe group-by

给定DataFrame与此类似(但有超过一百万行和约140000个不同group s)

df_test = pd.DataFrame({'group': {1:'A', 2:'A', 3:'A', 4:'A', 5:'B', 6:'B'},
                        'time' : {1:1,   2:3,   3:5,   4:23,  5: 7,  6: 12}})
每个group

我想找到time(实际df中实际为dtype('<M8[ns]'))与group的最短时间之间的差异。

我使用groupbytransform进行了管理,如下所示:

df_test['time_since'] = df_test.groupby('group')['time'].transform(lambda d: d - d.min())

正确产生:

    group   time    time_since
1   A       1       0
2   A       3       2
3   A       5       4
4   A       23      22
5   B       7       0
6   B       12      5

但计算需要几分钟。有更快/更聪明的方法吗?

1 个答案:

答案 0 :(得分:3)

我的建议:在lambda之外做transform(计算),所以我们这里不需要lambda。使用lambda,我们会多次调用计算(取决于多少组)

df_test=pd.concat([df_test]*1000)
%timeit df_test['time']-df_test.groupby('group')['time'].transform(min)
1000 loops, best of 3: 1.11 ms per loop
%timeit df_test.groupby('group')['time'].transform(lambda d: d - d.min())
The slowest run took 7.20 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 2.3 ms per loop