当两个点属于同一距离时如何找到最小距离

时间:2019-04-08 06:51:02

标签: python pandas matching pairwise

我有这样的{ "type":"record", "name":"asb", "namespace":"Employee", Fields[{ "name":"PurchaseId", "type":"numeric", "ClientFieldNm":null, "ImportFieldLenQty":0, "ImportRetainFlag":false, "ImportPrimaryKeyFlag":0, "ImportResolveFKFieldFlag":0, "ImportDeblankDataFlag":false, "ImportEncryptFlag":false, "ImportBatIndexFlag":false, "ImportEnforceValidTypeFlag":false ,"ImportRequiredFlag":false }]}

dataframe

如何找到属于每个点1,2,3的最小值,并且应该没有冲突,这意味着点1和2不应属于相同的点0.3。

2 个答案:

答案 0 :(得分:0)

您可以使用groupbymax功能。

df.groupby('A').B.max()

答案 1 :(得分:0)

如果我的理解正确,您想做两件事: -为每个B找到最小的A,并 -确保它们不会发生碰撞。您没有指定发生碰撞时的处理方式,因此我假设您只是想知道是否存在碰撞。

第一个可以通过Rarblack的答案来实现(尽管您应该使用min而不是max)。 第二,您可以使用.nunique()方法-查看有多少个唯一的B值(应该与唯一的A值的数量相同)

#setup dataframe
df = pd.DataFrame.from_dict({
    'A': [1,1,1,2,2,2,3,3,3],
    'B': [0.1,0.2,0.3,0.2,0.5,0.3,0.8,0.6,0.1]
})

# find minimum
x = df.groupby('A')['B'].min()

# assert that there are no collisions:
if not (x.nunique() == len(x)):
    print ("Conflicting values")