python - Python/pandas:从两个数据帧中查找匹配值并返回第三个值
问题描述
我有两个不同的数据框(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)
不幸的是,这仅提供df2['idname']
从索引 0 开始的值,而不是真正给我匹配行的值。
任何帮助表示赞赏。谢谢!
解决方案
可以试试这个:
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
推荐阅读
- java - Kotlin - 错误:无法在 IntelliJ IDE 中找到或加载主类
- github - 在 GitHub Actions 中缓存 node_modules
- reactjs - 如何在反应 js 中使用 onClick 滚动 div?
- python-3.x - gunicorn中的全局变量
- php - 如何使 laravel 文档根目录与 public_path 函数的返回值不同
- jquery - Firefox 和 IE Edge 中的 Ninja Forms 自定义 jQuery 问题
- java - 为什么日期输出看起来像这样?
- angular - isAuthenticated 调用上的角度刷新访问令牌
- python - No Module Name 'pyqtgraph.graphicsItems.PlotItem.plotConfigTemplate_pyqt5' while executing exe
- javascript - how to access response value within a function in for loop