首页 > 解决方案 > 从熊猫数据框中的多列中查找

问题描述

我有一个数据框(~8k 行),其中包含几列对应于要查找的固定值。

数据框看起来像这样-(ish):

班级名称 尺寸 颜色
第一的 大号 绿色
第一的 大号 蓝色的
第二 特大号 红色的

查找表看起来像这样(一个 df 或一个嵌套的 python 字典):

班级名称 尺寸 蓝色的 红色的 绿色
第一的 大号 90 95 90
第一的 特大号 100 105 100
第二 特大号 100 105 100

我正在寻找的是一种将新列添加到我的第一个 df 的有效方法。像这样的东西:

班级名称 尺寸 颜色 价值
第一的 大号 绿色 90
第一的 大号 蓝色的 90
第二 特大号 红色的 105

现在我正在解决这个问题

df['value'] = df.apply(
            lambda row: lookup_function(df['class_name'], df['size'], df['colour'])

# and that lookup_function includes the dict (or a df if that helps)
def lookup_function(class_name, size, colour):
    looky_here = {.. lookup table as dict structure ..}
    try:
        return float(looky_here[class_name][size][colour])
    except:
        return 0

这很慢(在处理完我的 8k df 之后,我有很多新的 8k df 要做)。我怎样才能更快更优雅地做到这一点?

标签: pythonpandasdataframe

解决方案


我会考虑融化(融化文档)你的查找表:

melted = lookup.melt(id_vars=['class_name', 'size'], value_vars=['blue', 'red', 'green'], var_name='colour')

将产生: 在此处输入图像描述

此时,您可以简单地将您的第一个数据框与它合并。

df.merge(melted, on=['class_name', 'size', 'colour'])

推荐阅读