按条件从 df2 添加列到 df1

时间:2021-07-13 11:39:36

标签: dataframe

我有 2 个名为 df1 和 df2 的 Pandas DataFrame。

Df1 包含 29000 行和 1 列,没有唯一的“PSP”字符串(例如:“XG-100000-12345”),称为“PSP”。 Df2 包含 500 行唯一字符串和 2 列信息。一种叫做“PSP”,一种叫做“Funk”。对于 df2 中每个唯一的“PSP”,都有一个关联的唯一“Funk”(例如:“34563-123”)。

现在我想遍历 df1 列“PSP”的每一行并将其与 df2 列“PSP”进行比较,如果 df1 列“PSP”等于 df2 列“PSP”,我想要将关联的“Funk”插入到与 df1 中匹配的“PSP”同一行的名为“Funk”的新列中。

我知道它的解释很糟糕,但让我试着说明一下:

df1:              df2:                               df1 (after the iterration):  
column "PSP"      column "PSP"    column "Funk"      column "PSP"   column "Funk"
XG-12000-123      XG-12000-653    45345-123          XG-12000-123   54675-126       
XG-12000-345      XG-12000-123    54675-126          XG-12000-345   35686-345                      
XG-12000-653      XG-12000-345    35686-345          XG-12000-653   45345-123                        
XG-12000-567      XG-12000-567    45678-387          XG-12000-567   45678-387                        
XG-12000-345                                         XG-12000-345   35686-345
XG-12000-567                                         XG-12000-567   45678-387

希望有人能帮忙。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找这个:

df1["Funk"] = df1.PSP.apply(lambda x: df2.loc[x].Funk)

这意味着,您正在创建一个新列“Funk”,其中包含在应用 lambda 函数后创建的内容,该函数从索引为 x 的行中获取来自 df2 的 Funk 值,即。 df1 中的值,到 df1 中的 PSP 列上。

编辑:您提到过,您没有索引。所以你可以这样尝试:

def _lookup(table, x):
    row = table[table.PSP == x]
    if len(row) == 0:
        return None
    return row.iloc[0].Funk

df1["Funk"] = df1.PSP.apply(lambda x: _lookup(df2, x))