我有一个数据帧,我正在尝试使用多进程来更有效地使用可用的核心进行循环。有一个例子
here
然而,我不知道“pool”是如何应用的。
示例df代码:
df = pd.DataFrame({
'mac':['type_a','type_a','type_a','type_a','type_a','type_b','type_b','type_b','type_b','type_b'],
'con':['a','a','a','c','b','a','a','b','a','c'],
'result':[1,1,2,2,3,1,1,3,1,2],
})
MAX_NUMBER = 3
for j in range(MAX_NUMBER):
i = j + 1
aft = f"mc{i}_aft"
bef = f"mc{i}_bef"
holder1 = ['con', 'mac', 'result']
holder2 = ['con', 'mac']
df['add'] = (df.groupby(holder1).cumcount() + 1)
df[aft] = df['add'].loc[df.result == i]
df = df.groupby(holder2, group_keys=False).apply(lambda x: x.fillna(method='ffill').fillna(0))
df = df.drop(['add'], axis=1)
df.fillna(0, inplace=True)
df[aft] = df[aft].astype('int')
df[bef] = df.groupby(holder2)[aft].shift(1)
df.fillna(0, inplace=True)
df[bef] = df[bef].astype('int')
示例df:
âââââ¦âââââââââ¦ââââââ¦âââââââââ
â â mac â con â result â
â ââââ¬âââââââââ¬ââââââ¬âââââââââ£
â 0 â type_a â a â 1 â
â 1 â type_a â a â 1 â
â 2 â type_a â a â 2 â
â 3 â type_a â c â 2 â
â 4 â type_a â b â 3 â
â 5 â type_b â a â 1 â
â 6 â type_b â a â 1 â
â 7 â type_b â b â 3 â
â 8 â type_b â a â 1 â
â 9 â type_b â c â 2 â
âââââ©âââââââââ©ââââââ©âââââââââ
样本输出:
âââââ¦âââââââââ¦ââââââ¦âââââââââ¦ââââââââââ¦ââââââââââ¦ââââââââââ¦ââââââââââ¦ââââââââââ¦ââââââââââ
â â mac â con â result â mc1_aft â mc1_bef â mc2_aft â mc2_bef â mc3_aft â mc3_bef â
â ââââ¬âââââââââ¬ââââââ¬âââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââ£
â 0 â type_a â a â 1 â 1 â 0 â 0 â 0 â 0 â 0 â
â 1 â type_a â a â 1 â 2 â 1 â 0 â 0 â 0 â 0 â
â 2 â type_a â a â 2 â 2 â 2 â 1 â 0 â 0 â 0 â
â 3 â type_a â c â 2 â 0 â 0 â 1 â 0 â 0 â 0 â
â 4 â type_a â b â 3 â 0 â 0 â 0 â 0 â 1 â 0 â
â 5 â type_b â a â 1 â 1 â 0 â 0 â 0 â 0 â 0 â
â 6 â type_b â a â 1 â 2 â 1 â 0 â 0 â 0 â 0 â
â 7 â type_b â b â 3 â 0 â 0 â 0 â 0 â 1 â 0 â
â 8 â type_b â a â 1 â 3 â 2 â 0 â 0 â 0 â 0 â
â 9 â type_b â c â 2 â 0 â 0 â 1 â 0 â 0 â 0 â
âââââ©âââââââââ©ââââââ©âââââââââ©ââââââââââ©ââââââââââ©ââââââââââ©ââââââââââ©ââââââââââ©ââââââââââ
ps.ectual df要大得多,涉及更多的变量和循环,因此,尝试充分利用可用的内核来节省处理时间。循环按测试前(bef)和测试后(aft)的结果/累计数分组。
恳请