pandas按指定列±0.1容差查找重复值并创建分组的实现咨询
pandas实现容差分组生成Set编号的方法
完整实现代码
import pandas as pd # 1. 加载数据(如果从文件读取可替换为pd.read_excel/pd.read_csv等方法 data = { "Part no": ["A1", "A2", "A3", "A4", "A5"], "A": [0.25, 0.26, 0.3, 0.7, 0.8], "B": [0.2, 0.3, 0.3, 0.3, 0.4], "C": [0.3, 0.3, 0.3, 0.3, 0.45], "D": [0.4, 0.4, 0.3, 0.3, 0.46] } df = pd.DataFrame(data) # 2. 容差分组核心逻辑 # 保存原索引,处理完后恢复原数据顺序 df = df.reset_index().sort_values(by="A", ignore_index=True) # 相邻A值差值大于0.1则为新分组起点,累加标记后加1实现编号从1开始 df["Set"] = (df["A"].diff() > 0.1).cumsum() + 1 # 恢复原顺序 df = df.sort_values(by="index", ignore_index=True).drop(columns="index") # 输出结果 print(df)
逻辑说明
- 先对A列排序是为了保证仅通过相邻数值对比即可判断分组边界,避免因数值顺序混乱导致分组错误。
diff()方法用于计算当前行与上一行A列的差值,第一行差值为NaN,和0.1比较结果为False,累加后初始值为0,加1后第一组编号为1,符合需求。- 该逻辑默认满足连通性分组规则:只要相邻数值差值≤0.1即属于同一分组,比如0.25、0.3、0.38会被划分为同一组。
内容的提问来源于stack exchange,提问作者Gokul Prasanth
相关产品推荐
相关产品推荐

