【发布时间】:2022-01-12 08:09:40
【问题描述】:
我有一个数据框 df2,它是 df 的副本。对于 col_2 列中的每个唯一值 c。我想随机提取 col_2 中对应值为 c 的 2 行。如果可用行数小于 2,则提取所有行。然后我在batch 列中将选定的行从 1 标记到 2。
您能否解释一下为什么我的函数不能对列表['a', 'b', 'c'] 中的所有值执行这项工作。例如,我观察
这意味着函数没有实现 b 和 c 的值。
import pandas as pd
import os
from multiprocessing import dummy
from random import sample
core = os.cpu_count()
P = dummy.Pool(processes = core)
data = np.array([(3, 'a'), (2, 'a'), (1, 'b'), (0, 'c'), (2, 'c'), (3, 'c')],
dtype=[('col_1', 'i4'), ('col_2', 'U1')])
df = pd.DataFrame.from_records(data)
df['batch'] = 0
df2 = df.copy()
def func(c):
idx = df.col_2 == c
pop = list(df[idx].index)
m = min(2, len(pop))
r = list(sample(pop, m))
df2.loc[r, 'batch'] = list(range(1, m + 1, 1))
P.map(func, ['a', 'b', 'c'])
df2
【问题讨论】:
-
因为你不能在主进程和其他进程之间共享任何变量。
-
@Corralien 你的意思是变量
df2在线程之间共享?有没有办法通过并行化获得类似的结果?我的数据集很大,所以按顺序做很慢。 -
你的数据框有多大,有多少组?
-
@Corralien 它有 32717928 行和 2193 个组。
标签: python pandas multiprocessing