遍历字典并为DataFrame新增列:值匹配对应键的问题及解决
字典多值匹配DataFrame列并填充对应键的问题解决
问题背景
我有一个字典,每个键对应多个用|分隔的值:
my_dict = { 'key1':'val1(ex1)|val2', 'key2':'val3 (ex2)|val4', 'key3':'val5', 'key4':'val6|val7|val8|val9' }
现有一个DataFrame,其中一列包含上述字典中的值,需求是遍历该列所有行,将值与字典中的值匹配后,把对应键填入DataFrame的新列。
最初尝试的问题
最初使用如下循环:
for key, val in my_dict.items(): df.loc[(df['Values'].str.contains(val)),'new_col'] = key
这个方法部分有效,但存在匹配失败的情况,尤其是值包含括号(如val1(ex1))时。另外尝试将字典值转为列表时,出现了列表不可哈希的错误。
解决方法
发现问题出在str.contains(val)的匹配逻辑上,于是将字典的值拆分为独立元素的列表(按|分隔符拆分):
my_dict = { 'key1':['val1(ex1)', 'val2'], 'key2':['val3 (ex2)', 'val4'], 'key3':['val5'], 'key4':['val6','val7','val8','val9'] }
然后修改循环为逐个值精确匹配:
for key, vals in my_dict.items(): for val in vals: df.loc[(df['Values'] == val), 'new_col'] = key
此方法解决了匹配失败的问题。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

