遍历df列列表,并有效地用字典中的值替换现有键python

问题描述 投票:1回答:1

我有一个关于项目概率的字典。我有一个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小时),这太多了,显然效率不高。

关于如何更有效地执行此操作的任何想法?

python algorithm dictionary processing-efficiency
1个回答
0
投票

[用途,Series.transformSeries.transform中的每个项目转换为熊猫系列,并使用item_list将该系列对应地映射到创建数据帧的映射字典Series.map,然后应用Series.map将数据帧聚合回具有映射概率列表的系列:

d

结果:

DataFrame.agg
© www.soinside.com 2019 - 2024. All rights reserved.