在距离的数据帧中查找特定值的位置

时间:2016-05-20 14:29:07

标签: python python-2.7 pandas

我一直在浏览我的问题的答案,但我似乎无法找到合适的解决方案。我有一个带距离的数据帧(NxN单元格),我找到整个数据帧的最小距离:     min_distance = distances.values.min() 现在我需要找到min_distance的位置(数据帧的哪一行和哪一列)。有什么想法吗?

修改

最小代码

import numpy as np
import pandas as pd

distances=[]
for i in range(5):
    distances.append([])
    for j in range(5):
        distances[i].append(np.random.randint(10))
distances=pd.DataFrame(distances)
min_distance = distances.values.min()
print "Minimum=", min_distance
print "Location of minimum value="

2 个答案:

答案 0 :(得分:2)

我取决于您希望结果的形式。但是,一种非常直接的方法是使用stackidxmin

像这样:

设置

import pandas as pd

df = pd.DataFrame([[2, 2, 2], [2, 1, 2], [2, 2, 2]],
                  columns=list('ABC'), index=list('abc'))

print df

   A  B  C
a  2  2  2
b  2  1  2
c  2  2  2

我们应该期望最小值为1且位置为行bB

解决方案

df.stack().idxmin()

('b', 'B')

现在你可以操纵它以任何其他方式提供这个。这只是提供一个元组。

答案 1 :(得分:1)

生成示例:

N = 4
df = pd.DataFrame(np.random.rand(N,N))

查找展平数据框的最小索引:

idx_min = df.values.flatten().argmin()

用于获取行号和列号的简单算术:

row = ((idx_min + 1) // N) - 1
column = idx_min - (row * N)