簡體   English   中英

識別 Pandas 中兩個重疊列的不同映射

[英]Identify distinct mappings of two overlapping columns in Pandas

假設我有一個 Pandas dataframe 有兩個標識符列,如下所示:

import pandas as pd

so_fake_data = pd.DataFrame(
    {
        'id_1': ['A', 'A', 'D', 'F', 'H', 'H', 'K', 'M'],
        'id_2': ['B', 'C', 'E', 'G', 'I', 'J', 'L', 'L']
    }
)

結果 so_fake_data df

假設我對這張表的解釋是:

  • A與B有關
  • A也與C有關
  • D與E有關
  • (等等)

使用前兩點:如果 A 與 B 和 C 相關,我想得出結論 A、B 和 C 都在同一組中。

本質上,我希望能夠識別這些分組......:

  • A、B、C
  • D、E
  • F, G
  • H,我,J
  • K、L、M

...然后在這樣的新列中給它們一個分組值,我可以在其中區分每個分組:

希望創造這個

我感謝任何人對此的幫助!

聽起來像網絡問題,嘗試使用networkx

import networkx as nx
G = nx.from_pandas_edgelist(df, 'id_1', 'id_2')
l = list(nx.connected_components(G))
l
Out[66]: [{'A', 'B', 'C'}, {'D', 'E'}, {'F', 'G'}, {'H', 'I', 'J'}, {'K', 'L', 'M'}]

那我們可以試試

from functools import reduce
d = reduce(lambda a, b: {**a, **b}, [dict.fromkeys(y,x) for x, y in enumerate(l)])
df['g'] = df.id_1.map(d)
df
Out[76]: 
  id_1 id_2  g
0    A    B  0
1    A    C  0
2    D    E  1
3    F    G  2
4    H    I  3
5    H    J  3
6    K    L  4
7    M    L  4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM