ste*_*488 2 python unique relation networkx 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)
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的大数据框(简化为ABC):
x y
0 A B
1 A C
2 B A
3 B C
4 C D
5 E F
6 F G
Run Code Online (Sandbox Code Playgroud)
有一些"循环",如第0行:A < - > B和第2行:B < - > A,这对我来说意味着相同的关系.
我希望得到x和y列值之间的关系,并给它们一个唯一的新id.
因此,对于此示例表,这意味着:
A = B = C = D给它一个唯一的id,即90 E = F = G给它一个唯一的id,即91
我需要的Result表应该是:
id value
0 90 A
1 90 B
2 90 C
3 90 D
4 91 E
5 91 F
6 91 G
Run Code Online (Sandbox Code Playgroud)
我怎么能用熊猫来实现这个目标?非常感谢帮助!
这看起来像一个图表,即networkx库,问题.让我们在图形网络中查找连接组件中的节点(请参阅此Wiki页面).
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
Run Code Online (Sandbox Code Playgroud)
输出:
0 A
0 B
0 C
0 D
1 E
1 F
1 G
dtype: object
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |