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

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

  1. 为什么会这样?

  2. 如何格式化这个循环?

  3. 有人可以编写一个更好的 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 
    

【问题讨论】:

    标签: python pandas list for-loop


    【解决方案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) 非常感谢先生。
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2018-10-20
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多