python - 最快的 Pythonic 方法来遍历字典以创建新的 Pandas 列
问题描述
我有一个字典“c”,有 30000 个键和大约 600000个唯一值(每个键 大约 20 个唯一值)
我想创建一个新的熊猫系列“'DOC_PORTL_ID'”以从“'image_keys'”列的每一行中获取样本值,然后在我的字典中查找它的键并返回。所以我写了一个这样的函数:
def find_match(row, c):
for key, val in c.items():
for item in val:
if item == row['image_keys']:
return key
然后我使用 .apply 创建我的新列,例如:
df_image_keys['DOC_PORTL_ID'] = df_image_keys.apply(lambda x: find_match(x, c), axis =1)
这需要很长时间。我想知道是否可以改进我的代码段以使其更快。
我用谷歌搜索了很多,但找不到最好的方法。任何帮助将不胜感激。
解决方案
您正在使用字典作为反向查找。坦率地说,你没有给我们足够的关于字典的信息。这 600,000 个值是唯一的吗?如果没有,你只返回你找到的第一个。这是预期的吗?
假设它们是唯一的
reverse_dict = {val: key for key, values in c.items() for val in values}
df_image_keys['DOC_PORTL_ID'] = df_image_keys['image_keys'].map(reverse_dict)
这和你自己做的一样好。如果这些值不是唯一的,则您必须更好地解释您期望发生的情况。
推荐阅读
- java - Liferay 7如何使用页面布局ID将单个页面从登台站点发布到实时站点?
- python - 如果键值匹配,则解析 JSON 数据并在 Python 中打印键值
- android - 单击按钮时更新/刷新片段
- c - 使用文件的管道输入,无法通过管道获取文件名而不是文件内容
- c# - C# HttpWebRequest 使用 cookie
- ios - 没有保存图像的权限,但 UIActivityViewController 完成返回没有错误
- php - 从 Rest API 获取 JSON 数据
- json - POSTMAN - 从 JSON 响应中保存属性值
- docker-compose - 如何在不重新启动所有服务的情况下将新端口添加到 docker-compose 服务之一?
- laravel - Laravel 资源 API CURL | 存储/删除不起作用