我有一个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)