最快的pythonic方式遍历字典以创建新的Pandas列

时间:2019-02-15 14:32:50

标签: python 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)

这需要很长时间。我想知道我是否可以改进代码段使其更快。

我在Google上搜索了很多,却找不到最佳的方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

您将字典用作反向查找。坦白说,您没有给我们足够的关于字典的信息。 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)

这和您自己做的一样好。如果这些值不是唯一的,则必须对期望发生的情况提供更好的解释。