根据重叠目标将多个索引折叠成组
Posted
技术标签:
【中文标题】根据重叠目标将多个索引折叠成组【英文标题】:Collapsing multiple indices into groups based on overlapping targets 【发布时间】:2019-07-22 14:59:33 【问题描述】:我目前正在查看我的数据集中的特征之间的相关性,并且需要将具有相似目标的特征分组到更大的超组中,以便进行更一般的相关性分析。
这些特征是一个热编码的,并且在一个看起来类似于这样的 pandas 数据帧中:
1 2 3 4 5 6 7 8 9
A 0 0 1 0 0 1 0 1 0
B 0 0 0 1 0 0 0 0 0
C 1 0 0 0 1 0 0 0 0
D 1 0 0 1 0 0 0 0 0
E 0 1 0 1 0 0 0 0 1
我希望生成的数据框如下所示:
1 2 3 4 5 6 7 8 9
group1(A) 0 0 1 0 0 1 0 1 0
group2(B,D,E,C)1 1 0 1 1 0 0 0 1
我已经尝试过所有形式的groupby以及networkx中的一些方法。
【问题讨论】:
【参考方案1】:这是一个隐藏的网络问题,所以我们在merge
之后使用networkx
s=df.reset_index().melt('index')
s=s.loc[s.value==1]
s=s.merge(s,on = 'variable')
import networkx as nx
G=nx.from_pandas_edgelist(s, 'index_x', 'index_y')
l=list(nx.connected_components(G))
from collections import ChainMap
L=dict(ChainMap(*[dict.fromkeys(y,x) for x, y in enumerate(l)]))
df.groupby(L).sum().ge(1).astype(int)
Out[133]:
1 2 3 4 5 6 7 8 9
0 1 1 0 1 1 0 0 0 1
1 0 0 1 0 0 1 0 1 0
L
Out[134]: 'A': 1, 'B': 0, 'C': 0, 'D': 0, 'E': 0
【讨论】:
相关问题,我怎样才能再次对特征进行分组,但这次是以组合方式,每个组是由可以从数据帧形成的不同组的数量构成的? @petrepage 你的意思是再次按索引分组?但是这次0到n的索引号是唯一的 很好@WeNYoBen 确定了这个问题的类型。 +1以上是关于根据重叠目标将多个索引折叠成组的主要内容,如果未能解决你的问题,请参考以下文章