繁体   English   中英

我有一个带有列表的 pandas 列。 对包含来自同一列的至少一个公共元素的行进行分组

[英]I have a pandas column with lists. Group rows that contains atleast one common element from same column

我有 pandas df 与 1 列与列表。 我想对至少有一个共同元素的所有列表进行分组。

Input Df :
> 
    Category
 0  [IAB19, IAB81, IAB82]
 1  [IAB25, IAB27]
 2  [IAB19, IAB20]
 3  [IAB22, IAB55, IAB56, IAB58]
 4  [IAB81, IAB89]
 5  [IAB82, IAB95]

我想知道 df['Category'] 中的任何代码是否存在于 df['Category'] 的任何其他行中。

如果是的话,我想合并那些共享至少 1 个共同元素的列表。

预期 Output:

    Category
 0  [IAB19, IAB81, IAB82, IAB20, IAB89, IAB95]
 1  [IAB25, IAB27]
 2  [IAB22, IAB55, IAB56, IAB58]

有什么想法吗?

这是一个隐藏的网络问题,所以我们可以尝试networkx ,但在此之前您可能需要将整个列表列pandas explode 0.25可用的功能)

import networkx as nx
df['Key']=df.index
df=df.explode('Category')
G=nx.from_pandas_edgelist(df, 'Category', 'Key')
l=list(nx.connected_components(G))
L=[dict.fromkeys(y,x) for x, y in enumerate(l)]
d={k: v for d in L for k, v in d.items()}
s=df.groupby(df.Key.map(d)).Category.apply(set)
s
Key
0    {IAB89, IAB82, IAB19, IAB95, IAB81, IAB20}
1                                {IAB27, IAB25}
2                  {IAB55, IAB56, IAB22, IAB58}
Name: Category, dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM