[英]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.