python - Pandas groupby 和转换需要很长时间

标签 python pandas dataframe group-by

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

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 的最短时间。

我已经使用groupby来管理它和transform如下:

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

但是计算需要将近一分钟。有没有更快/更智能的方法来做到这一点?

最佳答案

我的建议:在transform之外进行lambda(计算),所以我们在这里不需要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

关于python - Pandas groupby 和转换需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49678663/

相关文章:

python - MinMaxScaler 仅生成正值

python - 如何从Excel中提取指定行而不使用NaN

python - 如何从Pytorch中的高IO数据集读取,该数据集随着时间的推移而增长

python - 如何使 Pandas 数据框 Fortran 类型有序

使用 group_by 时重新排序 NA 的位置

python - 将数据帧年份和月份合并到新对象Python中

python - Pandas 百分比差异计算

python - 从 PLY 向解析器的调用者报告解析错误

python - 计算 Pandas 数据框中的新列

python - pandas.DataFrame : . hist() 与 .plot.hist() 方法