【问题标题】:Getting link between two columns in pandas获取熊猫中两列之间的链接
【发布时间】:2021-11-15 21:32:13
【问题描述】:

我有一个包含两列的数据框。两列包含整数。第二列包含链接到第一列的数字。如果两列之间没有链接,则第二列中的数字将为零值。这是表格的示例。

预期的输出是两列之间的连接列表。以附表为例,输出将是 [[2, 3, 4, 5], [6, 7, 8]]

这个问题和finding transitive relation between two columns in pandas类似但又不一样。

【问题讨论】:

    标签: python pandas relationship transitive-dependency


    【解决方案1】:

    您可以将其视为图形,将数据框视为边缘列表。然后您可以使用networkx 检索连接的节点:

    import pandas as pd
    import networkx as nx
    
    df = pd.DataFrame({'a': range(1, 11), 'b': [0, 4, 2, 5, 0, 7, 8, 0, 0, 0]})
    g = nx.from_pandas_edgelist(df[df['b'] != 0], source='a', target='b')
    
    print(list(nx.connected_components(g)))
    

    输出:

    [{2, 3, 4, 5}, {8, 6, 7}]
    

    【讨论】:

    • 比起我的回答,我更喜欢这个!
    【解决方案2】:

    不是真正的 Pandas 答案,但这是一种方法(在 here 的帮助下查找连续整数的运行):

    df = pd.DataFrame({'a': range(1, 11),
                   'b': [0, 4, 2, 5, 0, 7, 8, 0, 0, 0]})
    
    from itertools import groupby
    from operator import itemgetter
    
    zero_locs = df['b'].to_numpy().nonzero()[0]
    connections = []
    
    for k,g in groupby(enumerate(zero_locs), lambda x: x[0]-x[1]):
        group = (map(itemgetter(1),g))
        group = list(map(int,group))
        group.append(group[-1] + 1)
        connections.append(list(df['a'][group]))
    
    connections    # [[2, 3, 4, 5], [6, 7, 8]]
    

    【讨论】:

      猜你喜欢
      • 2020-12-14
      • 2018-04-14
      • 2021-05-07
      • 2017-08-11
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2021-03-10
      相关资源
      最近更新 更多