【问题标题】:Cluster values within two columns in groups in pandas大熊猫分组中两列内的聚类值
【发布时间】:2022-01-26 10:44:56
【问题描述】:

我有一个这样的dataframe

VAL1 VAL2
A    A
B    B
E    E
F    F
G    G
H    H 
I    I
J    J
A    B
A    C
B    A
B    C
C    A 
C    B
D    E
E    D
F    E
E    F
G    H
H    G
I    J
J    I
I    H
H    I
K    K

我想将GroupsVAL1VAL2 值聚类。

例如:

  1. ABC 在同一行,所以我将A,BC 分组在同一组中。
  2. DE 在同一行,EF 在同一行,所以我将D,E, and F 分组在同一组内。
  3. GH在同一行,HI在同一行,而我IJ在同一组,所以我把G,H,I and J分组在同一组内组。
  4. K 没有共享行,所以我单独分组。

然后我应该得到:

Groups VALs
G1     A
G1     B
G1     C
G2     D
G2     E
G2     F
G3     G
G3     H
G3     I
G3     J
G4     K

如果有帮助,这里是dataframe

{'VAL1': {0: 'A', 1: 'B', 2: 'E', 3: 'F', 4: 'G', 5: 'H', 6: 'I', 7: 'J', 8: 'A', 9: 'A', 10: 'B', 11: 'B', 12: 'C', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'E', 18: 'G', 19: 'H', 20: 'I', 21: 'J', 22: 'I', 23: 'H', 24: 'K'}, 'VAL2': {0: 'A', 1: 'B', 2: 'E', 3: 'F', 4: 'G', 5: 'H ', 6: 'I', 7: 'J', 8: 'B', 9: 'C', 10: 'A', 11: 'C', 12: 'A ', 13: 'B', 14: 'E', 15: 'D', 16: 'E', 17: 'F', 18: 'H', 19: 'G', 20: 'J', 21: 'I', 22: 'H', 23: 'I', 24: 'K'}}

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    为列表L创建connected_components,然后转换为DataFrame

    import networkx as nx
    
    # Create the graph from the dataframe
    g = nx.Graph()
    
    g.add_edges_from(df[['VAL1','VAL2']].itertuples(index=False))
    
    new = list(nx.connected_components(g))
    
    L =  [(f'G{cid + 1}', node) for cid, component in enumerate(new) for node in component]
    df = pd.DataFrame(L, columns=['Groups','VALSs'])
    print (df)
       Groups VALSs
    0      G1     A
    1      G1     B
    2      G1     C
    3      G2     D
    4      G2     F
    5      G2     E
    6      G3     G
    7      G3     I
    8      G3     J
    9      G3     H
    10     G4     K
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2021-12-14
      • 2017-06-26
      • 2021-06-12
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多