目标是根据查找表(即group_post_dict
)分配GP
列中的值。如果GP
中的文本包含lookup
中的任何字符串,则GP
列将根据正确的lookup
进行分配code> 和 group_
对。
下面的代码演示更好,
group_post_dict = {1: {'lookup': ['pet dog', 'pet cat'], 'group_': 'pet'},
2: {'lookup': ['flow red', 'flow yellow'], 'group_': 'flow'},
3: {'lookup': ['b year', 'c year'], 'group_': 'year'}}
data_list=['pet dog', 'pet cat','flow red', 'flow yellow','b year', 'c year']
df = DataFrame ( data_list)
df.columns =['PU']
for key, value in group_post_dict.items ():
mask_sv = df ['PU'].str.contains (
r'\b(?:{})\b'.format ( '|'.join ( value ['lookup'] ) ) )
df.loc [mask_sv, 'GP'] = value ['group_']
如何,for 循环
需要迭代的循环次数随着lookup
和group_
对的数量而增加。
请问这段代码是否可以进一步改进?
附注,对不起,湖的标题更好
最佳答案
使用Series.map
使用扁平化字典的扁平化字典值:
d= {x:v['group_'] for k, v in group_post_dict.items() for x in v['lookup']}
print (d)
{'pet dog': 'pet', 'pet cat': 'pet', 'flow red': 'flow',
'flow yellow': 'flow', 'b year': 'year', 'c year': 'year'}
df['GP'] = df['PU'].map(d)
print (df)
PU GP
0 pet dog pet
1 pet cat pet
2 flow red flow
3 flow yellow flow
4 b year year
5 c year year
关于python - 如何根据 Pandas 中字符串的出现有效地分配列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64384117/