首页 > 解决方案 > 如何尽可能高效地在 Python 中向我的 pandas Dataframe 添加条件的、基于列表的列?

问题描述

我有一个超过 110 万行的 pandas DataFrame。

我的代码需要实现以下目标:

给定一个 id 列表,让我们说:

ids = [1, 5, 8, 46, 55, 57, 143, 1003, 1564, ..., ]

和我的大熊猫数据框,其中包含一个带有 id 值的列:

df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6, 7, 8, 9, ... , 1000000],
                   "some_value": ["a", "b", "a", "c", "c", "a", "a", "d", "f", ... , "a"],
                   "another_value": ["x", "y", "x", "z", "q", "x", "x", "x", "z", ... , "y"]
                  })

(如果有帮助,DataFrame 会沿着 id 列排序)

我想添加一个布尔列selected,其中包含Trueid值是否存在于 中ids,否则False。生成的 DataFrame 应该有这样的列selected

[True, False, False, False, True, False, False, True, False, ... ]

目前我是这样实现的:

df["selected"] = False

for i in segment_ids:
    df.loc[df["id"] == i, "selected"] = True

它就像一个魅力,但是对于我的 1.1M 行 DataFrame,代码需要大约 20 分钟才能运行,这非常不方便。

如何以最少的时间实现我的目标?理想情况下,我希望它只运行几分钟,但我不知道这是否可能。

标签: pythonpandasdataframe

解决方案


解决方案是使用

df["selected"] = df['id'].isin(ids)

推荐阅读