我有一个类似于
的数据框 test_a test_b metric_e
0 OK NOK 12
1 OK OK 7
2 OK NOK 2
3 OK OK 55
,我想按一个条件过滤,这意味着test_a == OK
并捕获metric_e
上的最小值。我可以用两行代码复制一个数据框来实现这一点:
df_t = df[df.test_a == 'OK'].reset_index(drop=True)
df_t.iloc[df_t.metric_e.idxmin()].to_frame()
test_a | test_b | metric_e
OK | NOK | 2
有没有一种方法而不必使用中间数据帧?
答案 0 :(得分:4)
答案 1 :(得分:3)
我认为您的解决方案很好,也可以将两行代码与双[]
结合在一起以返回一行DataFrame
:
df = df.loc[[df.loc[df.test_a == 'OK', 'metric_e'].idxmin()]]
print (df)
test_a test_b metric_e
2 OK NOK 2
答案 2 :(得分:1)
利用代码的输出,您可以尝试:
translateX
如果不想移调:
df[df.metric_e==df.loc[df.test_a.eq('OK'),'metric_e'].min()].T
2
test_a OK
test_b NOK
metric_e 2
答案 3 :(得分:0)
在sort_values
之后的切片
df.query("test_a=='OK'").sort_values('metric_e').iloc[[0]]# or head(1)
Out[658]:
test_a test_b metric_e
2 OK NOK 2