I have a dataframe with 3 columns: x, y, time. There are a few thousand rows.
What I want to do is retrieve the row with the minimum time but I would like that the minim
You can filter out 0
values by query and get index of minimal value by idxmin, last select by loc
:
s = df.loc[df.query('time != 0')['time'].idxmin()]
print (s)
x 240.0
y 19.0
time 9.7
Name: 3, dtype: float64
df = df.loc[[df.query('time != 0')['time'].idxmin()]]
print (df)
x y time
3 240 19 9.7
Try this:
In [69]: df.loc[df.time>0, 'time'].idxmin()
Out[69]: 3
or
In [72]: df.loc[[df.loc[df.time>0, 'time'].idxmin()]]
Out[72]:
x y time
3 240 19 9.7
You don't need groupby
at all. Here's an option with mask
/where
+ loc
+ idxmin
;
df.loc[[df.time.mask(df.time.eq(0)).idxmin()]]
Or,
df.loc[[df.time.where(df.time.ne(0)).idxmin()]]
x y time
3 240 19 9.7