【问题标题】:How to create a pandas Series (column), based in a match with a value in another Dataframe?如何根据与另一个 Dataframe 中的值的匹配来创建熊猫系列(列)?
【发布时间】:2021-11-22 19:47:21
【问题描述】:

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

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

我正在尝试根据我拥有的“another_id”创建一个新系列,并应用一个循环遍历数据框系列的函数来比较是否有另一个代码并获取它们的 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 是否没有一种方法可以让我更快地做到这一点,以防有很多记录。

我需要一个像这个表这样的数据框,它有一个新列“ID Principal”,基于与另一个数据框列匹配的 Another_code。

ID ID Principal Another_code
1 12 54
2 12 54
3 13 55
4 14 56
5 14 56
6 14 56

【问题讨论】:

  • 我并没有完全遵循目标。但是,在函数 check_foreign_key 中:1)您使用的是 df_exp 而不是传入的 df_ppal,2)未定义 cod_exp。
  • 请您编辑问题以显示您想要的输出表的样本吗?无论如何,我认为您的解决方案最终可能涉及pd.DataFrame.join()。
  • 结帐Pandas Merging 101。它解释了如何合并数据帧(连接是合并的一种特殊情况)(合并非常快)。
  • 当然,我编辑了这个问题,我也更正了我的函数,我正确放置了变量,我添加了一个包含我需要的输出的表格,我想你可以有更多的上下文,让我知道更清晰。

标签: python pandas postgresql dataframe series


【解决方案1】:

确实,我不是很了解所有 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 Merging 101

最后我的答案:

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

谢谢大家!

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2018-08-15
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多