我有一個包含兩列的資料框。兩列包含整數。第二列包含鏈接到第一列的數字。如果兩列之間沒有鏈接,則第二列中的數字將為零值。這是表格的一個例子。

預期輸出是兩列之間的連接串列。以附表為例,輸出將是 [[2, 3, 4, 5], [6, 7, 8]]
這個問題與在 pandas 中尋找兩列之間的傳遞關系相似但不同。
uj5u.com熱心網友回復:
您可以將其視為圖形,將資料框視為邊緣串列。然后,您可以使用以下命令檢索連接的節點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}]
uj5u.com熱心網友回復:
不是一個真正的熊貓的答案,但這里有一個方法(與幫助,從這里尋找連續整數的運行):
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]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357499.html
上一篇:合并兩個具有重疊索引的資料幀,保留左側資料幀中的列值
下一篇:清理csv檔案的正確方法
