我必须处理一个大小为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万。
答案 0 :(得分:0)
尝试.str
和map
:
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