我有 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
希望有人能帮忙。
答案 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))