繁体   English   中英

将列添加到基于同一 DF 中其他两个列的值在 DF 中进行查找的 Pandas DF

[英]Add column to pandas DF that does a lookup within the DF based on values of two other columns in the same DF

我正在将数据从数据库中提取到 Pandas 中,它采用以下格式:

操作ID 程序 手术 父程序 父操作
65510 种子 设置 (空字符串) (空刺)
65511 种子 伊诺克 种子 设置
65512 种子 文化 种子 文化

有几千行,一行的父行并不总是前一行(但经常是)。 每行代表一个操作。 每行都有一个唯一的 ID。 每行中的Procedure 和Operation 的组合也应该是唯一的(它们本身都不是唯一的)。 ParentProcedure 和 ParentOperation 标识表中的另一行,它是相关行的“父”(这些空字符串表示该操作没有父)。 不幸的是,数据库不包含父操作的 ID,所以我想查找它并将其添加为列。

我正在尝试添加一个名为 ParentOperationID 的新列,其中每个条目都使用来自 ParentProcedure 和 ParentOperation 的值对过程和操作进行查找,并从第一次命中中找到相应的操作 ID(无论如何应该只是一次命中)。

我可以在 Excel 表格中使用以下内容(必须作为数组公式输入,即 Ctrl+Shift+Enter),但我正在努力在 Pandas 中实现类似的东西:

=INDEX([OperationID],MATCH([@[ParentProcedure]]&[@[ParentOperation]],[Procedure]&[Operation],0))

结果应该是这样的:

操作ID 程序 手术 父程序 父操作 父操作 ID
65510 种子 设置 (空字符串) (空刺) NaN
65511 种子 伊诺克 种子 设置 65110
65512 种子 文化 种子 文化 65111

没有父级的操作应该返回 NaN 或 None 或一些类似的标志,而不是零。 如果找不到父对象,则应抛出错误。

您可以自行连接数据并选择所需的列。

df = (df.merge(df, 
         left_on=['Procedure', 'Operation'], 
         right_on=['ParentProcedure', 'ParentOperation', 
         suffixes=['', '_parent'])
    .rename(columns={'OperationID_parent': 'ParentOperationID'})
)

这将创建一个名为OperationID_parent的新列。 然后您可以将其重命名为ParentOperationID

暂无
暂无

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

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