python - 识别 Pandas 中两个重叠列的不同映射

标签 python pandas

假设我有一个带有两个标识符列的 Pandas 数据框,如下所示:

import pandas as pd

so_fake_data = pd.DataFrame(
    {
        'id_1': ['A', 'A', 'D', 'F', 'H', 'H', 'K', 'M'],
        'id_2': ['B', 'C', 'E', 'G', 'I', 'J', 'L', 'L']
    }
)

Resulting so_fake_data df

假设我对此表的解释是:

  • A 与 B 相关
  • A 也与 C 相关
  • D 与 E 相关
  • (等等)

利用前两点:如果 A 与 B 和 C 都相关,我想得出 A、B 和 C 都属于同一组的结论。

本质上,我希望能够识别这些分组...:

  • A、B、C
  • D、E
  • F、G
  • H、I、J
  • K、L、M

...然后在新列中给它们一个分组值,如下所示,我可以在其中区分每个分组:

Hoping to create this

我感谢任何人对此的帮助!

最佳答案

听起来像是网络问题,请尝试使用networkx

import networkx as nx
G = nx.from_pandas_edgelist(df, 'id_1', 'id_2')
l = list(nx.connected_components(G))
l
Out[66]: [{'A', 'B', 'C'}, {'D', 'E'}, {'F', 'G'}, {'H', 'I', 'J'}, {'K', 'L', 'M'}]

那我们可以试试

from functools import reduce
d = reduce(lambda a, b: {**a, **b}, [dict.fromkeys(y,x) for x, y in enumerate(l)])
df['g'] = df.id_1.map(d)
df
Out[76]: 
  id_1 id_2  g
0    A    B  0
1    A    C  0
2    D    E  1
3    F    G  2
4    H    I  3
5    H    J  3
6    K    L  4
7    M    L  4

关于python - 识别 Pandas 中两个重叠列的不同映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67993365/

相关文章:

python - 我可以使用 pynput 将变量插入键盘吗?

python - 使用自定义对象查询 Python 字典键

python - Pandas 数据框中列中最接近的不相等行

python - 在 Pandas 中分组数据框?

python - 如何在pytorch中实现可微分的汉明损失?

python - Django:以编程方式/动态创建数据库表

python - Mako 模板中重复使用的变量导致 "UnboundLocalError: local variable ' xyz' 在赋值之前被引用”

python - 根据 pandas 中另一个数据帧的相似值填充数据帧中的列

python - 列表的 boolean 掩码作为 Pandas 数据框中的条目

python - 将 xlsx 从 azure blob 存储读取到 pandas dataframe,而不创建临时文件