通过遍历列表为 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 列表