我有一个像:
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)
要找到最小值,但我在提取所需结果方面遇到了麻烦。
答案 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