You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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']

实现步骤

  1. 构建移除-安装映射字典
    通过zip将OFF列和ON列配对,生成「被移除设备→后续安装设备」的映射关系:
off_to_on = dict(zip(df['OFF'], df['ON']))
# 生成的字典:{'B': 'A', 'A': 'C', 'D': 'F', 'C': 'T', 'F': 'H'}
  1. 定位分组起点
    分组的起点是那些仅出现在OFF列表、未出现在ON列表中的设备(这类设备是首个被移除的,没有前置安装记录),用集合运算筛选:
all_off = set(df['OFF'])
all_on = set(df['ON'])
starts = all_off - all_on  # 结果为 {'B', 'D'}
  1. 遍历生成分组
    从每个起点出发,顺着映射链依次查找后续设备,直到没有下一个关联设备为止,生成完整分组:
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)
  1. 输出结果
    按需求格式打印分组:
print(f"Group 1 = {groups[0]}")
print(f"Group 2 = {groups[1]}")

运行后即可得到目标分组列表。

内容的提问来源于stack exchange,提问作者stat_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:52:43