如何用Python Pandas DataFrame将设备ID按规则分为两组?
设备安装-移除数据集的分组实现
我们有一份记录设备安装(ON)-移除(OFF)的数据集,设备ID如A、B、C、D等均为独立标识。需要根据「移除某设备后安装另一设备」的关联关系,将这些ID划分成不同分组。比如移除B后安装A、移除A后安装C、移除C后安装T,这几个设备归为一组;移除D后安装F、移除F后安装H,这几个设备归为另一组。
给定示例数据集代码:
import pandas as pd ON = ['A','C','F','T','H'] OFF = ['B','A','D','C','F'] df = pd.DataFrame({'ON':ON,'OFF':OFF})
期望得到的分组结果:
Group 1 = ['B','A','C','T'] Group 2 = ['D','F','H']
实现步骤
- 构建移除-安装映射字典
通过zip将OFF列和ON列配对,生成「被移除设备→后续安装设备」的映射关系:
off_to_on = dict(zip(df['OFF'], df['ON'])) # 生成的字典:{'B': 'A', 'A': 'C', 'D': 'F', 'C': 'T', 'F': 'H'}
- 定位分组起点
分组的起点是那些仅出现在OFF列表、未出现在ON列表中的设备(这类设备是首个被移除的,没有前置安装记录),用集合运算筛选:
all_off = set(df['OFF']) all_on = set(df['ON']) starts = all_off - all_on # 结果为 {'B', 'D'}
- 遍历生成分组
从每个起点出发,顺着映射链依次查找后续设备,直到没有下一个关联设备为止,生成完整分组:
groups = [] for start in starts: current_device = start current_group = [current_device] while current_device in off_to_on: current_device = off_to_on[current_device] current_group.append(current_device) groups.append(current_group)
- 输出结果
按需求格式打印分组:
print(f"Group 1 = {groups[0]}") print(f"Group 2 = {groups[1]}")
运行后即可得到目标分组列表。
内容的提问来源于stack exchange,提问作者stat_man
相关产品推荐
相关产品推荐

