使用,
Series.transform
item_list
并相应地使用
Series.map
映射字典
d
dropna
NaN
价值观:
d = {'I1': 0.1, 'I4': 0.4}
df['prob_list'] = (
df['item_list'].transform(lambda s: pd.Series(s).map(d).dropna().values)
)
更新
(使用
multiprocessing
项目清单
到
prob_list
):
import multiprocessing as mp
def map_prob(s):
s = s[~s.isna()]
return s.transform(
lambda lst: [d[k] for k in lst if k in d] or np.nan)
def parallel_map(item_list):
splits = np.array_split(item_list, mp.cpu_count())
pool = mp.Pool()
prob_list = pd.concat(pool.map(map_prob, splits))
pool.close()
pool.join()
return prob_list
df['prob_list'] = parallel_map(df['item_list'])
# print(df)
uer_id item_list prob_list
0 U1 [I1, I3, I4] [0.1, 0.4]
1 U2 [I5, I4] [0.4]