簡體   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