【问题标题】:Enhancing performance of pandas groupby&apply提高 pandas groupby&apply 的性能
【发布时间】:2021-08-12 14:11:36
【问题描述】:

这几天我一直被困在加速groupby&apply的问题上,代码如下:

dat = dat.groupby(['glass_id','label','step'])['equip'].apply(lambda x:'_'.join(sorted(list(x)))).reset_index()

当数据大小增加时会花费大量时间。 我尝试将 groupby&apply 更改为无效的类型; 然后我尝试使用 unique() 但仍然无法加快运行时间。

我想要一个更新代码以减少运行时间,如果有解决此问题的方法将不胜感激

【问题讨论】:

  • 能否附上样本数据?

标签: pandas pandas-groupby pandas-apply


【解决方案1】:

我觉得你可以考虑使用multiprocessing
检查以下示例

import multiprocessing
import numpy as np

# The function which you use in conjunction with multiprocessing
def loop_many(sub_df):
  
  grouped_by_KEY_SEQ_and_count=sub_df.groupby(['KEY_SEQ']).agg('count')
  return grouped_by_KEY_SEQ_and_count


# You will use 6 processes (which is configurable) to process dataframe in parallel
NUMBER_OF_PROCESSES=6
pool = multiprocessing.Pool(processes=NUMBER_OF_PROCESSES)

# Split dataframe into 6 sub-dataframes
df_split = np.array_split(pre_sale, NUMBER_OF_PROCESSES)

# Process split sub-dataframes by loop_many() on multiple processes
processed_sub_dataframes=pool.map(loop_many,df_split)

# Close multiprocessing pool
pool.close()
pool.join()

concatenated_sub_dataframes=pd.concat(processed_sub_dataframes).reset_index()

【讨论】:

  • 引发 AttributeError:Can't pickle local object loop_many() first ,当我将循环函数从函数中取出时引发 RuntimeError 属于
  • @Beytab 嗯,它可能来自不同的执行环境,因为我在 jupyter nootbook 上测试了上面的代码。我猜你是在 python 模块上运行代码。我为该错误找到了一些有用的链接。 1.stackoverflow.com/a/58897266/8979023 2.stackoverflow.com/a/21345423/8979023干杯
猜你喜欢
  • 2019-09-08
  • 1970-01-01
  • 2022-11-14
  • 2017-08-24
  • 2022-01-06
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多