Pandas如何比较单行列值与同组多值并标记最优项
Pandas 同类别最优标记实现方案
核心实现代码
import pandas as pd # 示例数据集 example = pd.DataFrame({ "values": [1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8,8,8,8,8, 9 ], "prices": [1.1, 2.2, 3.31, 3.32, 3.33, 4.1, 4.2, 5.1, 6.1, 6.2, 7.1, 7.2, 7.3, 8.1, 8.2, 8.3, 8.4, 8.5, 9.1] }) # 标记同组最小prices为最优 example["is_best"] = example["prices"].eq(example.groupby("values")["prices"].transform("min")).astype(int)
逻辑说明
- 该方案完全兼容存在其他无关列的场景,不会修改除
is_best外的任何列数据 groupby("values")["prices"].transform("min")会按values列分组计算每组prices的最小值,返回与原数据集长度完全一致的序列,每个位置对应所属组的最小价格eq()方法匹配当前行价格是否等于组内最小值,返回布尔值,通过astype(int)直接转为1/0标记
扩展适配
如果同组存在多个相同最小价格,仅需标记第一个出现的为最优,可调整为以下逻辑:
example["is_best"] = (example.groupby("values")["prices"].rank(method="first") == 1).astype(int)
内容的提问来源于stack exchange,提问作者Amorphous
相关产品推荐
相关产品推荐

