python - 如何尽可能高效地在 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
,其中包含True
该id
值是否存在于 中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 分钟才能运行,这非常不方便。
如何以最少的时间实现我的目标?理想情况下,我希望它只运行几分钟,但我不知道这是否可能。
解决方案
解决方案是使用
df["selected"] = df['id'].isin(ids)
推荐阅读
- sql-server - 将 Union All 替换为 Or Sql Server
- c# - Cookie 身份验证在 ASP.NET Core 应用程序中不起作用
- c# - 如何检查二维数组是否从大到小排序
- java - IntelliJ:将文本复制并粘贴为格式正确的注释
- node.js - MongoDB CRUD 路由返回 null 或错误值
- python - 批量叠加/合并具有相似文件名的图像
- html - html css 有效性在 maxlength 上失败
- javascript - vuejs中的动态表单时髦行为
- xamarin - 手机用 OMR 阅读答题卡(Xamarin 应用程序)
- javascript - 如何动态设置最大值和最小值
在 vue 2.0 中,当我从表中提取最大值和最小值时