首页 > 解决方案 > python pandas在列中获得不同的匹配

问题描述

我有一个看起来有点像这段代码给出的数据框:

import pandas as pd
data = {'check1':  ['a', 'a', 'b', 'd', 'f', 'f', 'g'],
        'check2': ['b', 'c', 'c', 'e', 'g', 'h', 'h']}
df = pd.DataFrame (data, columns = ['check1','check2'])

我想要结束的是一个列表或数据框列表或类似的东西,它告诉我两个方向上两列的不同匹配。它会是这样的:

[['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]

我已经尝试过这样做,但我无法让它双向使用并合并所有匹配项:

df.groupby('check1').apply(lambda x: x['check2'].unique()).apply(pd.Series).reset_index()

这是我最接近的一次,但它似乎有点像黑客,并且不会在两个方向上都这样做并删除任何重复项。我不知道是否有更合乎逻辑/更优雅的方法。我要到星期二才再次工作,但如果有人在此之前有任何好主意,将不胜感激。

标签: pythonpandasdataframe

解决方案


尝试认为同一个子列表是一个连接,这样更像是网络问题

import networkx as nx
G=nx.from_pandas_edgelist(df, 'check1', 'check2')
l=list(nx.connected_components(G))
l
Out[133]: [{'a', 'b', 'c'}, {'d', 'e'}, {'f', 'g', 'h'}]

推荐阅读