按条件和列中的最小值过滤Pandas数据框

时间:2019-03-29 20:24:39

标签: python pandas

我有一个类似于

的数据框
  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

有没有一种方法而不必使用中间数据帧?

4 个答案:

答案 0 :(得分:4)

使用nsmallest

df[df['test_a']=='OK'].nsmallest(1, 'metric_e')

输出:

  test_a test_b  metric_e
2     OK    NOK         2

答案 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