-2

我有一个dataframe这样的:

A  B  
1 0.1 
1 0.2
1 0.3
2 0.2
2 0.5
2 0.3
3 0.8
3 0.6
3 0.1

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

4

2 回答 2

0

您可以使用groupbymax功能。

df.groupby('A').B.max()
于 2019-04-08T06:58:55.683 回答
0

如果我理解正确,你想做两件事: - 找到B每个 distinct的最小值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")
于 2019-04-08T07:22:03.057 回答