亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 R 或 Python 合并兩個 id 列,識別哪些行屬于同一組相關 ID

如何使用 R 或 Python 合并兩個 id 列,識別哪些行屬于同一組相關 ID

一只甜甜圈 2022-07-26 15:45:34
我有 2 個獨立創建/收集的 ID 列。我試圖通過根據兩個 ID 列中的任何一個確定哪些行是同一相關組 id 的一部分,將這兩個 ID 列合并為一個列。我會根據一些規則考慮相關的行:1:如果一個LOAN在多行中具有相同的值,則它們屬于同一個組(示例中僅供參考)。我稱之為loan_group。這里沒有問題。2:如果一個 COLLATERAL 在多行中具有相同的值,則它們屬于臨時組。我稱它為lateral_group(與#1 相同的規則。)這里沒有問題。3:最后,我不確定如何準確表達這一點,但任何時候屬于同一組的值之間存在重疊(跨貸款和抵押列),這些組應該進一步合并。例如:df <- data.frame('LOAN' = c('L1', 'L2', 'L5', 'L2', 'L6', 'L7', 'L8'),                 'COLLATERAL' = c('C1', 'C1', 'C8', 'C4', 'C8', 'C9', 'C4'))df$laon_group <- as.numeric(factor(df$LOAN))df$collateral_group <- as.numeric(factor(df$COLLATERAL))df$final_grouping <- NALOAN  COLLATERAL  loan_group  collateral_group  final_grouping----  ----------- ----------  ----------------  --------------L1    C1*         1           1                 **1**L2**  C1*         2           1                 **1**L5    C8          3           2                 2L2**  C4***       2           3                 **1**L6    C8          4           2                 2L7    C9          5           4                 3L8    C4***       6           3                 **1***因為第 1 行和第 2 行的值都為 C1,所以它們將被分配到相同的最終分組中**因為第 2 行的 LOAN 值為 L2,這意味著我們可以為第 4 行分配“1”的最終分組,因為該行可以通過 L2/C1 鏈接鏈接回第 1 行***最后,因為第 4 行包含 COLLATERAL 值 C4,這意味著我們可以在合并的最終分組中包含第 7 行。該行可以通過 L2/C4 和 L2/C1 鏈接鏈接回第一行該數據集大約是 15m 個獨特的 LOAN + COLLATERAL 組合。在某些邊緣情況下,這些組可能會交叉幾千個(可能 +1 萬個)ID。我在 BQ 測試一些解決方案時遇到了一些資源問題,包括我原來的問題中的建議,這就是為什么我想嘗試在 R/Python 中執行此操作
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

如果您將此視為圖形問題,則可以執行以下操作:


library(igraph)


g <- make_empty_graph(directed = FALSE, n = nrow(tab))


for (loan_id in unique(tab$loan)) {

    loan_idx = which(tab$loan == loan_id)

    if (length(loan_idx) >= 2) {

        g <- g + path(loan_idx)

    }

}


for (collateral_id in unique(tab$collateral)) {

    collateral_idx = which(tab$collateral == collateral_id)

    if (length(collateral_idx) >= 2) {

        g <- g + path(collateral_idx)

    }

}


tab$grouping = components(g)$membership

即,您制作一個圖表并在具有匹配貸款或抵押品 ID 的任何行之間添加邊。我不確定這是如何優化的,因為forR 中的循環很少是正確的答案。


輸出與您的預期輸出匹配:


> tab

  loan collateral loan_group collateral_group final grouping

1   L1         C1          1                1     1        1

2   L2         C1          2                1     1        1

3   L5         C8          3                2     2        2

4   L2         C4          2                3     1        1

5   L6         C8          4                2     2        2

6   L7         C9          5                4     3        3

7   L8         C4          6                3     1        1


查看完整回答
反對 回復 2022-07-26
  • 1 回答
  • 0 關注
  • 82 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號