我有一个中等大小的文件(~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) 想象一下,我有一个包含不同类型对象的数组,例如:
[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)
这有点奇怪,因为对我来说这是有道理的.我是红宝石的新手,我很欣赏一些见解.