繁体   English   中英

如何创建一个 pandas 系列(列),基于与另一个 Dataframe 中的值的匹配?

[英]How to create a pandas Series (column), based in a match with a value in another Dataframe?

我的问题如下:我不太了解所有 pandas 方法,我认为肯定有更有效的方法:我必须将两个表从 .csv 文件加载到 postgres 数据库; 这些表通过一个 id 相互关联,该 id 作为外键并来自源数据,但是我必须将它们与我的逻辑控制的不同 id 相关联。

我在下图中以图形方式解释:

在此处输入图像描述

我正在尝试根据我拥有的“another_id”创建一个新系列,并应用一个循环遍历 dataframe 系列的 function 来比较是否有另一个代码并获取它们的 id

def check_foreign_key(id, df_ppal):
  if id:
    for i in df_ppal.index:
      if id == df_ppal.iloc[i]['another_id']:
        return df_ppal.iloc[i]['id']

dfs['id_fk'] = dfs['another_id'].apply(lambda id : check_foreign_key(id, df_ppal))

在这一点上,我认为它效率不高,因为我必须在所有列中循环以匹配 another_id 并获取并获取我需要的正确 ID 在图片中为黄色。

所以我应该考虑搜索算法以使任务更有效率,但我想知道 pandas 是否没有一种方法可以让我更快地执行此操作,以防有很多记录。

我需要一个像这张表一样的 dataframe,它有一个基于匹配 Another_code 的新列“ID Principal”,以及另一个 dataframe 列。

ID 身份证校长 另一个代码
1个 12 54
2个 12 54
3个 13 55
4个 14 56
5个 14 56
6个 14 56

确实,我不是很了解 pandas 的所有功能,我可以使用合并解决我的问题,我不知道 pandas 在 SQL 中很好地实现了典型的 Join。

该文档对我帮助很大:

  1. https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#database-style-dataframe-or-named-series-joining-merging

  2. Pandas合并101

最后是我的回答:

new_df = principal.merge(secondary, on='another_id')

我谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM