我有以下代码来生成熊猫数据框:
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的范围内。
答案 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}