首页 > 解决方案 > 在 python 中使用 bincount numpy 提高 groupby pandas 的性能

问题描述

我有这样的DataFrame:

data = [
    [1, 11111, 324, 0],
    [1, 11111, 324, 0],
    [1, 11111, 324, 0],
    [1, 22222, 490, 0],
    [1, 33333, 675, 1],
    [2, 44444, 888, 0]
]

df_data = pd.DataFrame(data, columns = ['CustID','MatchID','LocationID','IsMajor'])

# These are my results I want to return
df_result = pd.DataFrame()
df_result = (df.groupby(['CustID','IsMajor'])['MatchID']
               .agg(lambda x: list(x.value_counts()))
               .unstack('IsMajor',fill_value = []))

结果df_result

IsMajor       0    1
CustID   
1          [3,1]  [1]
2          [1,1]  []

一切正常,但速度很慢

我找到了很多解决方案,我认为我应该使用bincount(NumPy 的一个功能),但它不起作用:

df_result = (df.groupby(['CustID','IsMajor'])['MatchID']
             .agg(lambda x: np.bincount(x))
             .unstack('IsMajor',fill_value = []))

我可以使用bincount其他解决方案或其他解决方案来提高性能吗?

标签: pythonpandasperformancenumpy

解决方案


推荐阅读