想象一下由pandas
数据帧组成的:
df = pd.DataFrame({
'id': range(1, 10),
'mfr': ('a', 'b', 'a', 'c', 'd', 'e', 'd', 'd', 'f'),
'vmn': ('A', 'A', 'B', 'C', 'D', 'E', 'F', 'F', 'D')
})
以下是给出的表格
id mfr vmn
0 1 a A
1 2 b A
2 3 a B
3 4 c C
4 5 d D
5 6 e E
6 7 d F
7 8 d F
8 9 f D
我希望通过按mfr
和/或vmn
进行分组来确定哪些id
彼此属于。我可以轻松地使用另一个来分配组ID。
df['groupby_mfr'] = df.groupby('mfr').grouper.group_info[0]
df['groupby_vmn'] = df.groupby('vmn').grouper.group_info[0]
以下是相关内容:
这将给出以下结果
id mfr vmn groupby_mfr groupby_vmn
0 1 a A 0 0
1 2 b A 1 0
2 3 a B 0 1
3 4 c C 2 2
4 5 d D 3 3
5 6 e E 4 4
6 7 d F 3 5
7 8 d F 3 5
8 9 f D 5 3
现在我想将它们组合成一个新的组ID,以便生成以下数据框:
id mfr vmn groupby_mfr groupby_vmn combined_group
0 1 a A 0 0 0
1 2 b A 1 0 0
2 3 a B 0 1 0
3 4 c C 2 2 1
4 5 d D 3 3 2
5 6 e E 4 4 3
6 7 d F 3 5 2
7 8 d F 3 5 2
8 9 f D 5 3 2
前两行相同是因为vmn相等。第三行也属于同一组,因为对于vmn,第三行和第一行相同。以此类推... 另请注意,这将在多个列上运行,有许多行,因此性能也非常重要。
combined_group
是如何计算的,请您详细说明一下。 - Zeronetworkx
库。 - jezraelnetworkx
及其connected_components
。但是,我不确定如何将其扩展到多列。 - Shaido