假设我有一个带有两个标识符列的 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']
}
)
假设我对此表的解释是:
- 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
...然后在新列中给它们一个分组值,如下所示,我可以在其中区分每个分组:
我感谢任何人对此的帮助!
最佳答案
听起来像是网络问题,请尝试使用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/