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
答案 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