我一直在浏览我的问题的答案,但我似乎无法找到合适的解决方案。我有一个带距离的数据帧(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="
答案 0 :(得分:2)
我取决于您希望结果的形式。但是,一种非常直接的方法是使用stack
和idxmin
。
像这样:
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
且位置为行b
列B
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)