Pandas Dataframe基于两列查找值最小但大于0的行

2024-09-24 02:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有3列的数据帧:x,y,time。有几千排。在

我要做的是检索具有最小时间的行,但我希望最小时间不应为0。在

例如

x     y    time
240   1    28.5
240   2    19.3
240   240     0
240   19    9.7

到目前为止,我尝试了以下方法:

^{pr2}$

我也尝试过groupby

df.loc[df.groupby('id_x', sort=False)['time'].idxmin()]

我知道在这部片子里我遇到了一些问题,因为我通常都是连续剧。在


Tags: 数据方法idfalsedftime时间sort
3条回答

你根本不需要groupby。这里有一个选项mask/where+loc+idxmin

df.loc[[df.time.mask(df.time.eq(0)).idxmin()]]

或者

^{pr2}$

     x   y  time
3  240  19   9.7

试试这个:

In [69]: df.loc[df.time>0, 'time'].idxmin()
Out[69]: 3

或者

^{pr2}$

您可以按^{}筛选出0值,并通过^{}获得最小值的索引,最后按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

相关问题 更多 >