通过遍历列表为 pandas 列赋值

Posted

技术标签:

【中文标题】通过遍历列表为 pandas 列赋值【英文标题】:Assigning a value to a pandas column by Iterating through lists 【发布时间】:2021-05-13 14:33:22 【问题描述】:

我有一个由三部分组成的问题 - 我有三个列表,我正在尝试编写一个循环来迭代其中两个列表,以根据匹配(或通过列表列表)为新列分配值)。当我将它分配给下面的列时,它只打印 else 值或最后一个条件中的任何数字。提前谢谢你。

    为什么会这样?

    如何格式化这个循环?

    有人可以编写一个更好的 for 循环来迭代 all_names,将 1 分配给 all_names[0] 的匹配项,将 2 分配给 all_names[1] 的匹配项吗? - enumerate 是否有用?

    first_names = ['David', 'Dani', 'Declan']
    second_names = ['Katz', 'Foley', 'Stevenson']
    all_names = [first_names, second_names]
    
    for row in df['name']:
        for elem in firstname_list:
           if elem in row:
              df['name_num']= 1
        for elem in secondname_list:
           if elem in row:
              df['name_num']= 2
        else:
             df['name_num']= 3 
    

【问题讨论】:

【参考方案1】:

检查np.select

df['name_num'] = np.select( (df['name'].isin(first_names), 
                             df['name'].isin(second_names) ),
                            (1,2), 3)
                         

【讨论】:

我认为对于 first_name 中的 elem_a 和 second_name 中的 elem_b 如果 elem_a 在行 df[name_num] = 1 如果 elem_b 在行 df[name_num] =2 好的@Quang 我马上试试,谢谢! 是否可以修改它以提供基于部分匹配的匹配?例如我有 Dani,但希望它也能匹配 Danielle 用this question中的答案替换isin 啊,我只尝试了 .str.contains 而不是 |.join(list) 非常感谢先生。

以上是关于通过遍历列表为 pandas 列赋值的主要内容,如果未能解决你的问题,请参考以下文章

根据附加的字典列表在 df 中创建新列并遍历字典 Pandas 列表

循环遍历 pandas 列名以创建列表

Python / Pandas:循环遍历数字列表

Python pandas 按行按列遍历DataFrame

遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列

如何遍历一个DataTable中的每行每列,并且为每行每列的最后一列赋值