【发布时间】:2020-04-11 03:55:27
【问题描述】:
我有两个不同的数据框 (df1, df2),它们的形状完全不同:df1: (64, 6); df2: (564, 9)。
df1 包含一个列 (df1.objectdesc),其中的值(字符串)也可以在 df2 (df2.objdescription) 的列中找到。由于这两个数据框具有不同的形状,我必须使用 .isin() 来获得匹配值。然后我想从 df2 (df2.idname) 中的不同列中获取第三个值,这些值恰好来自匹配的行并将它们添加到 df1 - 这就是我努力的地方。
示例数据集:
df1
Content objectdesc TS_id
0 sdrgs 1_OG.Raum45 55
1 sdfg 2_OG.Raum23 34
2 psdfg GG.Raum12 78
3 sdfg 1_OG.Raum98 67
df2:
Numb_val object_count objdescription min idname
0 463 9876 1_OG_Raum76 1 wq19
1 251 8324 2_OG.Raum34 9 zt45
2 456 1257 1_OG.Raum45 4 bh34
3 356 1357 2_OG.Raum23 3 if32
4 246 3452 GG.Raum12 5 lu76
5 345 8553 1_OG.Raum98 8 pr61
预期输出:
Content objectdesc TS_id idname
0 sdrgs 1_OG.Raum45 55 bh34
1 sdfg 2_OG.Raum23 34 if32
2 psdfg GG.Raum12 78 lu76
3 sdfg 1_OG.Raum98 67 pr61
这是我目前的代码:
def get_id(x, y):
for values in x,y:
if x['objectdesc'].isin(y['objdescription']).any() == True:
return y['idname']
df1['idname'] = get_id(df1, df2)
不幸的是,这仅提供从索引 0 开始的 df2['idname'] 的值,而不是真正给我匹配行中的值。
感谢任何帮助。谢谢!
【问题讨论】:
-
您能以更易于使用的格式共享数据吗? CSV 很好,
to_dict的输出也可以。 -
现在的格式更好了吗?
-
看起来没什么不同?此外,
if .... == True:有两个问题。即使有必要,您也应该使用is True进行比较。事实上,没有必要测试它是否为真,因为无论如何这就是 if 语句所做的。