【发布时间】: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