如何在Python中尽可能节省时间地将一个有条件的、基于列表的列添加到我的pandas Dataframe中



我有一个pandas DataFrame,它有110多万行。

我的代码需要实现以下功能:

给定一个id列表,比如:

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

和我的大熊猫DataFrame,它包含一个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列排序的(

如果ids中存在id值,则我想添加一个包含True的布尔列selected,否则为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

它的工作原理很有魅力,但对于我的110万行DataFrame,代码运行大约需要20分钟,这非常不方便。

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

解决方案是使用

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

最新更新