从熊猫数据框中的多列查找

时间:2021-03-04 12:34:41

标签: python pandas dataframe

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

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

<头>
class_name 尺寸 颜色
第一次 L 绿色
第一次 L 蓝色
第二个 XL 红色

查找表如下所示(df 或嵌套的 python 字典):

<头>
class_name 尺寸 蓝色 红色 绿色
第一次 L 90 95 90
第一次 XL 100 105 100
第二个 XL 100 105 100

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

<头>
class_name 尺寸 颜色 价值
第一次 L 绿色 90
第一次 L 蓝色 90
第二个 XL 红色 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 要做)。我怎样才能更快更优雅地做到这一点?

1 个答案:

答案 0 :(得分:1)

我会考虑融化 (melt documentation) 您的查找表:

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

会产生: enter image description here

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

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