小编Man*_*iro的帖子

Pandas 并行 groupBy 消耗大量内存

我有一个中等大小的文件(~300MB),其中包含个人列表(~300k)以及他们执行的操作。我正在尝试使用此处描述groupBy的并行化版本对每个人应用一个操作。它看起来像这样apply

import pandas
import multiprocessing
from joblib import Parallel, delayed

df = pandas.read_csv(src)
patients_table_raw = apply_parallel(df.groupby('ID'), f)

def applyParallel(dfGrouped, func):
    retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(group) for name, group in dfGrouped)
    return pd.concat(retLst)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这消耗了大量的空间。我认为这与以下简单命令有关:

list_groups = list(df.groupby('ID'))
Run Code Online (Sandbox Code Playgroud)

消耗几GB内存!如何进行?我最初的想法是在小“堆栈”中迭代 groupBy,而不消耗太多内存(但我没有找到一种方法来做到这一点而不将其转换为列表)。

更详细的上下文

我有一个简单的 CSV 数据集,格式如下:

|-------------------------|
| ID | Timestamp | Action |
|-------------------------|
|1   | 0         | A      |
|1   | 10        | B      |
|1   | 20        | C      |
|2   | 0         | B      |
|2   | …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas

5
推荐指数
1
解决办法
1792
查看次数

将具有不同对象的数组分离为ruby中的特定对象数组

想象一下,我有一个包含不同类型对象的数组,例如:

[1,true,'hello',true,2,' ','world']
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个函数,该函数输出一组数组,这些对象是分开的.

[ [1,2] , ['hello', ' ', 'world'] , [true,true] ]
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经来了:

def same_object arg
    arg.inject([]){ |acc,value| 
            flag = 0
            acc.each do |i|
                if i[0] != nil && value.class == i[0].class
                    i << value
                    flag = 1
                end
            end

            if flag == 0
                acc << [value]
            end
    }
end
Run Code Online (Sandbox Code Playgroud)

问题是,当我这样做时,显然我得到了一个错误:

value.class == i[0].class
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为对我来说这是有道理的.我是红宝石的新手,我很欣赏一些见解.

ruby arrays object

0
推荐指数
1
解决办法
33
查看次数

标签 统计

arrays ×1

group-by ×1

object ×1

pandas ×1

python ×1

ruby ×1