优化列表与真正大字典键之间的交集

时间:2017-10-13 04:27:14

标签: python-3.x pandas dictionary

我必须处理一个大小为15k到20K的数据帧列。我必须处理其中名为df.apply

的列'name'
df['bew_col']=df.apply(lambda row: valuation_formula(row['persons_name']), axis=1)

def valuation_formula(name_str):

    flag='UNMAPPED'
    sr=name_str.split(' ')
    f=list(set(sr).intersection(set(name_dict.keys())))
    # print (f)
    if len(f)>0:
        flag=name_dict[str(f[0])]
        # print flag

    return flag   

我的name_dict是一个包含500万个键的字典。我如何优化我的代码来做一个字符串列表的有效交集(这将是一个小而不是担心的情况)与这个巨大的字典中的键,以返回匹配的键的相应值?

我可以使用任何其他数据结构吗?

现在脚本需要20分钟才能运行。 df大小为10k,name_dict大小为300万。

1 个答案:

答案 0 :(得分:0)

尝试.strmap

names_series = df['persons_name']
name_mapping = None

while True:
    name_series = name_series.str.partition()
    mapping = name_series[0].map(name_dict)
    if name_mapping is None:
        name_mapping = mapping
    else:
        name_mapping[name_mapping.isnull() & (~mapping.isnull())]=mapping
    name_series = name_series[2]
    if name_series.str.len().sum()==0:
        break

name_series[name_series.isnull()] = 'UNMAPPED'
df['bew_col'] = name_series