数据框搜索第n大列并存储相应的行

时间:2019-02-23 08:37:28

标签: python pandas

我有以下代码来生成熊猫数据框:

df=pd.DataFrame({'x':[],'y':[],'w':[],'h':[]})

for idx in range(len(contours)):
    x, y, w, h = cv2.boundingRect(contours[idx])
    df=df.append({'x':x, 'y':y, 'w':w, 'h':h}, ignore_index=True)

结果数据帧如下:

        h      w      x      y
0    17.0  550.0   20.0  370.0
1    16.0  549.0   20.0  341.0
2     5.0    7.0  497.0  288.0
3    31.0  167.0  201.0  271.0
4    30.0   91.0   56.0  263.0
5    11.0   17.0  174.0  251.0
6     3.0    3.0   19.0  251.0
7     3.0    3.0   29.0  248.0
8    67.0  179.0  398.0  234.0
9    32.0   92.0  202.0  234.0
10   21.0   16.0  175.0  231.0
11   11.0   12.0  202.0  218.0
12   11.0    3.0    0.0  216.0
13    3.0    3.0   14.0  211.0

我想获得宽度(w)的最大2个值并返回相应的行: 我可以使用以下代码获取最多2个值:

a=df['w'].nlargest(2)
print(a)

我的问题是如何将行值存储在对应于最大列值的变量中(在我的情况下,x = 20.0,y = 370.0,h = 17.0)

跟进:我想取w = 550,并保存所有x和y的值,这些值都在w±5的范围内。

2 个答案:

答案 0 :(得分:2)

使用DataFrame.nlargest-指定用于查看值的列:

df = df.nlargest(2, 'w')
print (df)
      h      w     x      y
0  17.0  550.0  20.0  370.0
1  16.0  549.0  20.0  341.0

答案 1 :(得分:2)

您可以使用isin通过预先计算的值来选择行:

df[df['w'].isin(a)]

      h      w     x      y
0  17.0  550.0  20.0  370.0
1  16.0  549.0  20.0  341.0

要将最高值存储在var中,您只需创建该行的字典:

top_dict = df[df['w'].isin(df['w'].nlargest(1))].iloc[0].to_dict()

print(top_dict)
{'h': 17.0, 'w': 550.0, 'x': 20.0, 'y': 370.0}