python / Pandas : Find matching values from two dataframes and return third value

标签 python pandas dataframe

我有两个不同的数据帧(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'] 值,而不是真正从匹配的行中给我值。

任何帮助表示赞赏。谢谢!

最佳答案

可以试试这个:

df1.merge(df2, left_on='objectdesc', right_on='objdescription')[['Content', 'objectdesc', 'TS_id', 'idname']]

引用:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html

关于 python / Pandas : Find matching values from two dataframes and return third value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394690/

相关文章:

python - 为什么 `pandas.read_csv` 不是 `pandas.DataFrame.to_csv` 的倒数?

python - 获取行中的最高值,但仅在前一行的特定条件下

python - pandas DataFrame 的 transform 与 applymap 之间有什么区别

python - Python中最小值和最大值的大O

python - 无法在 emacs 中从 pydbgr 中找到模块

python - 获得所需输出的替代方法 "Numpy Vectorized "

python - 将文件读入 Pandas 数据框中,其中行按日期分组

python-3.x - 对大型数据框中的选定列进行重新排序

python - python 中将列转换为行

python-2.7 - 对于 python 中给定的值条件,将列名称作为数据框中的列表返回