如何在大型数据集上多线程大量的pandas数据帧选择调用

时间:2018-05-04 23:47:55

标签: python pandas numpy

df是一个包含12百万行未分类的数据帧。 每行都有一个GROUP ID。

最终目标是为每个唯一的GROUP ID随机选择1行,从而填充名为SELECTED的新列,其中1表示选中0表示相反

可能有5000多个唯一的GROUP ID。 寻求比以下更好更快的解决方案,潜在的多线程解决方案?

for sec in df['GROUP'].unique():
    sz = df.loc[df.GROUP == sec, ['SELECTED']].size
    sel = [0]*sz
    sel[random.randint(0,sz-1)] = 1
    df.loc[df.GROUP == sec, ['SELECTED']] = sel

2 个答案:

答案 0 :(得分:1)

您可以尝试使用矢量化版本,如果您有许多课程,这可能会加快速度。

new MyClass(vector1, vector2)

请注意,如果存在重复索引,则可能会失败。

答案 1 :(得分:0)

我不知道熊猫的数据帧,但是如果您只是将所选的设置为一个,后来假设没有选择属性意味着您可以避免更新所有元素。

您也可以这样做:

selected = []
for sec in df['GROUP'].unique():
    selected.append(random.choice(sec))

或列表推导

selected = [random.choice(sec) for sec in  df['GROUP'].unique()]

也许这可以加快速度,因为你不需要允许新内存和udpate数据帧中的所有元素。

如果您真的想要多线程,请查看concurrent.futures https://docs.python.org/3/library/concurrent.futures.html