首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Self Join Pandas后获得2列之间的唯一关系?

如何在Self Join Pandas后获得2列之间的唯一关系?
EN

Stack Overflow用户
提问于 2018-07-25 03:41:08
回答 1查看 236关注 0票数 3
代码语言:javascript
复制
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简化):

代码语言:javascript
复制
     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

我需要的结果表应该是:

代码语言:javascript
复制
    id  value
0   90    A
1   90    B
2   90    C 
3   90    D
4   91    E
5   91    F
6   91    G

我怎样才能用熊猫做到这一点?我们将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 03:56:30

这看起来像是一个图表,即networkx库,问题。让我们在图网络(see this wiki page)中查找连接组件中的节点。

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
0    A
0    B
0    C
0    D
1    E
1    F
1    G
dtype: object
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档