Python 如何使DataFrame.transform()调用更快?

Python 如何使DataFrame.transform()调用更快?,python,performance,pandas,pandas-groupby,Python,Performance,Pandas,Pandas Groupby,我有一个大熊猫数据框架,如下所示 import pandas as pd import random import numpy as np length = 10000000000 df = pd.DataFrame({ 'group': [random.choice(range(1, (length/5))) for _ in range(length)], 'val': np.random.rand(length) }) 现在我想计算组中元

我有一个大熊猫数据框架,如下所示

import pandas as pd
import random
import numpy as np

length = 10000000000
df = pd.DataFrame({
        'group': [random.choice(range(1, (length/5))) for _ in range(length)],
        'val': np.random.rand(length)
        })
现在我想计算组中元素之间的距离

df['distance'] = df.groupby('group').transform(
        lambda x: np.concatenate([np.diff(x.index), np.array([np.nan])]))
如何使此操作更快?

使用:


使用:



我感谢你的帮助!你的回答很有帮助。我能等一会儿其他答案吗?我不认为会有更好的解决方案,但我想比较各种解决方案。如果在几个小时内没有其他答案,我会接受你的答案。再次谢谢你。@Han-是的,当然,没问题。我感谢你的帮助!你的回答很有帮助。我能等一会儿其他答案吗?我不认为会有更好的解决方案,但我想比较各种解决方案。如果在几个小时内没有其他答案,我会接受你的答案。再次谢谢你。@Han-是的,当然,没问题。
length = 10000
df = pd.DataFrame({
        'group': [random.choice(range(1, int(length/5))) for _ in range(length)],
        'val': np.random.rand(length)
        })

#print (df)
In [317]: %timeit df['distance'] = df.groupby('group').transform(lambda x: np.concatenate([np.diff(x.index), np.array([np.nan])]))
1 loop, best of 3: 1.74 s per loop

In [318]: %timeit df['distance1'] = pd.Series(df.index).groupby(df['group']).diff(-1).abs()
1 loop, best of 3: 200 ms per loop

In [319]: %timeit df['distance2'] = df.reset_index().groupby('group')['index'].diff(-1).abs()
1 loop, best of 3: 201 ms per loop