gpt4 book ai didi

Pandas 分组表现

转载 作者:行者123 更新时间:2023-12-05 06:35:18 26 4
gpt4 key购买 nike

我在一个有大量内存 (190GB) 的工作站上运行。我们需要对具有数百万条记录的数据集进行 groupby [通常具有 2 个 ID 列、1 个类型 ID 列、1 个日期列和 3-5 个分类列](在 10-30 M 之间),同时生成聚合列的列表。
我们的问题是性能非常慢。在 R 中运行相同的代码运行不到一个小时。

当前的测试数据集只有 770 万条记录。数据如下所示:

ID1         ID2         typeid    date_      cat1    cat2   cat3
12554876563 1435465465 09238423 2013-04-2 cat11 cat21 cat31
12554876563 1435465465 984375 2012-11-12 cat12 cat21 cat33
125543213 12554876563 01248423 2012-04-2 cat11 cat23 cat31
5436236563 125543213 09275423 2017-04-2 cat13 cat24 cat32

groupby 如下所示:

def agg_col(var):
li = ';'.join([str(i) for i in set(var.dropna())])
return li

df = ( df.groupby(['ID1','ID2']).agg(lambda x: agg_col(x))
.assign(weight=df.groupby(['ID1','ID2']).size())

我们还尝试使用 dask as suggested in this post但我们仍然遇到问题,aggregate-agg 过程需要一个多小时。

如有任何建议,我们将不胜感激。

最佳答案

将“category”系列更改为“int”确实提高了性能,但仍然不够好。
我们的解决方案是将其转储到 sqlite -> groupby -> 并重新加载。
以下数据集在不到 5 分钟后完成。

con = sqlite3.connect('/path/to/tempdb.db')
df.to_sql('data', con, if_exists='replace')
sql_index = 'create index id12_idx on data(ID1, ID2)'
con.execute(sql_index)
sql_gp = 'SELECT ID1, ID2, GROUP_CONCAT(DISTINCT typeid), GROUP_CONCAT(DISTINCT date_), GROUP_CONCAT(DISTINCT cat1), GROUP_CONCAT(DISTINCT cat2), GROUP_CONCAT(DISTINCT cat3) from data GROUP BY ID1, ID2')
df = pd.read_sql_query(sql_gp, con)

关于 Pandas 分组表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49733938/

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