我有一个关于项目概率的字典。我有一个500万行的df,看起来像这样:
user_id item_list
U1 [I1,I3,I4]
U2 [I5,I4]
和字典:{'I1': 0.1, 'I4': 0.4, ..}
我试图遍历每一行并创建一个包含概率的列表,像这样:
user_id item_list prob_list
U1 [I1,I3,I4] [0.1,0.4]
U2 [I5,I4] [0.4]
这是我的代码:
keys = list(prob_dict.keys())
df['prob_list'] = df.progress_apply(lambda x: get_probability(prob_dict=prob_dict,
keys=keys, item_list=x['item_list']),axis=1)
def get_probability(prob_dict, keys, item_list):
prob_list = []
for pair in item_list:
if str(set(pair)) in keys:
prob = prob_dict[str(set(pair))]
prob_list.append(prob)
if len(prob_list)>=1:
return prob_list
else:
return np.nan
由于我正在使用tqdm,所以我知道它要花多长时间(200小时),这太多了,显然效率不高。
关于如何更有效地执行此操作的任何想法?
[用途,Series.transform
将Series.transform
中的每个项目转换为熊猫系列,并使用item_list
将该系列对应地映射到创建数据帧的映射字典Series.map
,然后应用Series.map
将数据帧聚合回具有映射概率列表的系列:
d
结果:
DataFrame.agg