python - 如何根据 Pandas 中字符串的出现有效地分配列值?

标签 python pandas for-loop

目标是根据查找表(即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 循环需要迭代的循环次数随着lookupgroup_对的数量而增加。

请问这段代码是否可以进一步改进?

附注,对不起,湖的标题更好

最佳答案

使用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/

相关文章:

python - 如何删除其中包含特殊字符的行

python - 在文件中加入一个字行

python - 如何创建多个空数据框?

Python(pandas)循环遍历列中的值,对每个值进行计算

python - 按条件从不同列和索引获取值

java - 在java中编写一个连续的 'for'循环

javascript - 无法获取数组以正确显示嵌套 for 循环的结果

python - pandas 人类索引排序

python - 使用 pandas 按照模式将两列相乘

python - 为什么在我的例子中 For 循环比 Map、Reduce 和 List 理解更快