如何在自连接 Pandas 后获得两列之间的唯一关系?
How to get unique Relation between 2 columns after Self Join Pandas?
import pandas as pd
data={'x':['A','A','B','B','C','E','F'],
'y':['B','C','A','C','D','F','G']}
df=pd.DataFrame(data)
print(df)
我有一个像这样的大数据框(用 ABC 简化):
x y
0 A B
1 A C
2 B A
3 B C
4 C D
5 E F
6 F G
有 "loops" 第 0 行:A <-> B 和第 2 行:B <-> A 这对我来说意味着相同的关系。
我想要 x 和 y 列值之间的关系,并给它们一个唯一的新 ID。
所以对于这个例子 table 这意味着:
A = B = C = D 给它一个唯一的id,即90
E = F = G 给它一个唯一的 id,即 91
我需要的结果table应该是:
id value
0 90 A
1 90 B
2 90 C
3 90 D
4 91 E
5 91 F
6 91 G
如何使用 pandas 实现此目的?
非常感谢您的帮助!
这似乎是一个图表,即networkx library, problem. Let's look for nodes in connected components within a graph network (see this wiki page)。
import pandas as pd
import networkx as nx
data={'x':['A','A','B','B','C','E','F'],
'y':['B','C','A','C','D','F','G']}
df=pd.DataFrame(data)
G = nx.from_pandas_edgelist(df, 'x','y')
g = nx.connected_components(G)
S = pd.Series()
for i,n in enumerate(g):
s = pd.Series(sorted(list(n)), index=[i]*len(n))
S = pd.concat([S, s])
S
输出:
0 A
0 B
0 C
0 D
1 E
1 F
1 G
dtype: object
import pandas as pd
data={'x':['A','A','B','B','C','E','F'],
'y':['B','C','A','C','D','F','G']}
df=pd.DataFrame(data)
print(df)
我有一个像这样的大数据框(用 ABC 简化):
x y
0 A B
1 A C
2 B A
3 B C
4 C D
5 E F
6 F G
有 "loops" 第 0 行:A <-> B 和第 2 行:B <-> A 这对我来说意味着相同的关系。
我想要 x 和 y 列值之间的关系,并给它们一个唯一的新 ID。
所以对于这个例子 table 这意味着:
A = B = C = D 给它一个唯一的id,即90 E = F = G 给它一个唯一的 id,即 91
我需要的结果table应该是:
id value
0 90 A
1 90 B
2 90 C
3 90 D
4 91 E
5 91 F
6 91 G
如何使用 pandas 实现此目的? 非常感谢您的帮助!
这似乎是一个图表,即networkx library, problem. Let's look for nodes in connected components within a graph network (see this wiki page)。
import pandas as pd
import networkx as nx
data={'x':['A','A','B','B','C','E','F'],
'y':['B','C','A','C','D','F','G']}
df=pd.DataFrame(data)
G = nx.from_pandas_edgelist(df, 'x','y')
g = nx.connected_components(G)
S = pd.Series()
for i,n in enumerate(g):
s = pd.Series(sorted(list(n)), index=[i]*len(n))
S = pd.concat([S, s])
S
输出:
0 A
0 B
0 C
0 D
1 E
1 F
1 G
dtype: object