Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行

Posted

技术标签:

【中文标题】Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行【英文标题】:Python, Pandas and for loop: Populate dataframe row based on a match with list values 【发布时间】:2017-10-23 16:35:26 【问题描述】:

我有一个带有“id”列的 pandas 数据框。我还有一个名为“new_ids”的列表,它是“id”列中的值的子集。

所以我想在 pandas 数据框中添加一列,指示 ID 是否是新的。我首先将此列初始化为 0。

df['new_id'] = 0

现在我想遍历 new_id 列表,每当在我的 pandas 数据框“id”列中找到 ID 时,我想将属于该 ID 的行的“new_id”值更改为 1。所以稍后,所有新的 ID 将在“new_id”列中分配一个 1,所有旧 ID 将保持为 0。

index = df.index.values 

for x in index:
    if new_ids in df.id:
        df.new_id[x] = '1'
        x = x + 1
    else:
        x = x + 1

这不知何故不起作用,我遇到了很多错误。知道我做错了什么吗?非常感谢!

【问题讨论】:

【参考方案1】:

其实你不需要在DataFrame中手动迭代。 Pandas 将为您完成工作。使用内置方法来完成这项工作非常简单直接。

这里有一些示例代码。

import pandas as pd
sample = [['a','b','c'],[1,2,3],[4,5,6],['e','f','g']]
df = pd.DataFrame(sample, columns = ['name', 'ids', 'value'])


new_ids = ['b',5]
df['new_id'] = df['ids'].isin(new_ids)

【讨论】:

完美!这正是我想要的。非常感谢。 :)

以上是关于Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行的主要内容,如果未能解决你的问题,请参考以下文章

Python中使用pandas数据框和嵌套for循环的基于项目的协作过滤器的瓶颈

Python:将带有pandas的SQL结果读取到用于for循环的列表中时出现问题

使用 for 循环将行迭代到使用 Pandas 和 Numpy Python 的 csv 文件

Python 3.x - 使用 for 循环将数据附加到 Pandas 数据帧

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改

删除 for 循环 - 使用字典而不是 pandas