找到数据帧的最小值

问题描述 投票:0回答:2

我有一个数据框,用于存储三个对象之间的距离:

df = pd.DataFrame({'obj1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 
                   'obj2': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'],
                   'dist': [0, 1, 2, 1, 0, 3, 2, 3, 0]})

有没有一种方法可以计算除自身之外每个

obj1
具有最小距离的对象?对于上面的示例,返回
[('a', 'b', 1), ('b', 'a', 1), ('c', 'a', 2)]

pandas dataframe
2个回答
0
投票
import pandas as pd
df = pd.DataFrame({'obj1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 
                   'obj2': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'],
                   'dist': [0, 1, 2, 1, 0, 3, 2, 3, 0]})
#   obj1 obj2  dist
# 0    a    a     0
# 1    a    b     1
# 2    a    c     2
# 3    b    a     1
# 4    b    b     0
# 5    b    c     3
# 6    c    a     2
# 7    c    b     3
# 8    c    c     0

df.loc[df.obj1!=df.obj2].sort_values(by="dist").drop_duplicates(subset="obj1", keep="first")
#   obj1 obj2  dist
# 1    a    b     1
# 3    b    a     1
# 6    c    a     2

0
投票

您可以删除 obj1 等于 obj2 的行(例如使用

query
),然后使用
groupby.idxmin
:

df.loc[df.query('obj1 != obj2').groupby('obj1')['dist'].idxmin()]

输出:

  obj1 obj2  dist
1    a    b     1
3    b    a     1
6    c    a     2
© www.soinside.com 2019 - 2024. All rights reserved.