gpt4 book ai didi

python - Pandas:加速 groupby?

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:39 37 4
gpt4 key购买 nike

我想知道是否可以使用以下应用程序来加速 pandas dataframe.groupby :

基本数据结构:

  • 具有 9 列的 HDFStore
  • 4 列是包含数据的列 (colF ... colI)
  • 剩余 5 列 (colA ... colE) 的组合提供了唯一索引
  • colE 是“最后修改”列

基本思想是实现一个具有“事务内存”的数据库。假设某个条目发生更改,我不会删除它,而是在“上次修改”列中写入一个带有新值的新行。这使我能够追溯查看条目随时间的变化情况。

但是,在我只想要数据当前有效“状态”的情况下,它需要仅选择具有最近“上次修改”列的那些行:

idx = df.groupby(['colA', 'colB', 'colC', 'colD'], 
as_index=False, sort=False)['colE'].max()
df_current_state = df.merge(idx, 'inner', on=['colA', 'colB', 'colC', 'colD', 'colE'])

这个 groupby 方法占用了我大约 70% 的运行时间。

注意:对于大多数行,仅存在与“上次修改”列相关的单个条目。仅对于极少数情况,存在具有不同“上次修改”值的行的多个版本。

除了按如下方式更改程序逻辑之外,还有其他方法可以加快此过程吗?

<小时/>

无需groupby的替代解决方案:

添加一个额外的“ bool ”列activeState,用于存储该行是否属于“事件状态”。

当行发生更改时,将其 activeState 字段标记为 False 并插入带有 activeState=True 的新行。

然后可以使用 activeState==True 查询表,而不是使用 groupby

我对这个解决方案的问题是,如果 activeState 字段设置不正确,它可能会出现错误。当然,这可以通过使用“上次修改”列来恢复,但如果可以加快groupby的速度,那就万无一失了......

最佳答案

使用排序后跟 drop_duplicates 怎么样?我在一个具有四个级别分组的大型数据库上使用它,速度很快。我选择第一个,所以我不知道第一个与最后一个如何帮助提高速度,但您也可以随时反转排序。

df_current_state = df.sort(columns='colE')
df_current_state = df_current_state.drop_duplicates(subset=['colA','colB','colC','colD'],take_last=True)

关于python - Pandas:加速 groupby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447584/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com