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
有像第0行:A <-> B和第2行:B <-> A这样的“循环”,这对我来说意味着相同的关系。
我想要有x和y列值之间的关系,并给它们一个唯一的新id。
因此,对于此示例表,这意味着:
A=B=C=D给它一个唯一的id,即90E=F=G给它一个唯一的id,即91
我需要的结果表应该是:
id value
0 90 A
1 90 B
2 90 C
3 90 D
4 91 E
5 91 F
6 91 G
我怎样才能用熊猫做到这一点?我们将非常感谢您的帮助!
发布于 2018-07-25 03:56:30
这看起来像是一个图表,即networkx库,问题。让我们在图网络(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
https://stackoverflow.com/questions/51506391
复制相似问题