基于第三列匹配的列

时间:2017-10-17 13:28:56

标签: python pandas

我有一个像:

    Name  id  precision
0  John   1          1
1  John   1          2
2  John   2          3
3  Marc   1          3
4   Tom   2          1

这里是生成它的代码:

pd.DataFrame([{'Name': 'John', 'id': 1, 'precision': 1}, 
{'Name': 'John', 'id': 1, 'precision': 2}, 
{'Name': 'John','id': 2, 'precision': 3}, 
{'Name': 'Marc', 'id': 1, 'precision': 3}, 
{'Name': 'Tom', 'id': 2, 'precision': 1}])

我有不同的算法,找到btw名称和id的对应关系。每个算法都在相应的列中报告了自己的精度(越小越好)。最终我想获得最佳匹配(如果有的话)。

期望的结果是:

    Name  id  precision
0  John   1          1
4   Tom   2          1

John应与1匹配,因为它是唯一匹配精度为1的(Marc的精度为3)。

Tom应与2匹配,因为它是唯一匹配精度为1的。

我正在尝试:

df['min'] = df.groupby('Name').precision.transform(min)

要找到最小值,但我在提取所需结果方面遇到了麻烦。

2 个答案:

答案 0 :(得分:1)

我认为你需要分组' id'列而不是名称。

df.loc[df.groupby('id')['precision'].idxmin()]

输出:

   Name  id  precision
0  John   1          1
4   Tom   2          1

答案 1 :(得分:1)

无需groupby

df.sort_values(['id','precision']).drop_duplicates(['id'],keep='first')
Out[813]: 
   Name  id  precision
0  John   1          1
4   Tom   2          1