如何筛选Pandas DataFrame中排序后唯一元素差值一致的列
问题核心修正点
- 你现有代码获取的单列唯一值没有做单独排序:对整个DataFrame排序不会影响单列unique结果的顺序,必须对每列的unique值单独排序才能得到正确的相邻差值
- 求diff的循环变量存在笔误,会导致运行报错
- 判断差值全相等可以直接用
np.all()方法实现
完整可运行代码
import numpy as np import pandas as pd first = [20, 10, 40, 30, 10] sec = [94, 74, 34, 80] # 给列命名匹配你预期的输出名称 df = pd.DataFrame(list(zip(first,sec)), columns=['first', 'sec']) match_cols = [] for col in df.columns: # 取当前列唯一值并升序排序 unique_sorted = np.sort(df[col].unique()) # 唯一值不足2个的场景可按需调整是否计入结果,这里默认跳过 if len(unique_sorted) < 2: continue # 计算相邻差值 diff_arr = np.diff(unique_sorted) # 判断所有差值完全相等 if np.all(diff_arr == diff_arr[0]): match_cols.append(col) print(match_cols)
运行输出为你预期的['first']
关键逻辑说明
- 单列唯一值排序:
np.sort(df[col].unique())保证拿到当前列从小到大排列的唯一值,避免原数据出现顺序导致差值计算错误 - 差值一致判断:
np.all(diff_arr == diff_arr[0])会逐位对比差值数组的所有元素和第一个元素是否完全一致,所有相等才会返回True
内容的提问来源于stack exchange,提问作者lilxy
相关产品推荐
相关产品推荐

