如何在另一列panda中选择符合条件的具有最小值的所有行



我想从数据集中选择Points==0且Day列中值最小的所有行。

数据帧

Points  Day  Name
55       0   Jon
0        7   Ron
0        8   Sam
44       6   Chris
0        7   Joan
49       2   Greg

我希望得到

Points  Day  Name
0        7   Ron
0        7   Joan

我已经厌倦了这个代码,但我只得到了第一个这样的例子。

df1 = df.loc[[df.loc[df.points == 0, 'Day'].idxmin()]]

如何获取所有行?

IIUC

df.query('Points==0').loc[lambda x : x['Day']==x['Day'].min()]
Out[207]: 
Points  Day  Name
1       0    7   Ron
4       0    7  Joan

您可以使用min函数从Points==0的过滤数据集中获取最小值,然后使用它来过滤整个数据集。

df[(df["Points"] == 0) & (df["Day"] == min(df[df["Points"] == 0]["Day"]))]

现在它工作了:

>>> df
Points  Day
0      55    0
1       0    7
2       0    8
3      44    6
4       0    7
5      49    2
>>> df[(df["Points"] == 0) & (df["Day"] == min(df[df["Points"] == 0]["Day"]))]
Points  Day
1       0    7
4       0    7

您可以通过以下方式完成:

df[(df['Points']==0) & (df['Day']==df[df['Points']==0]['Day'].min())]

&表示pandas布尔索引中的AND,如果要使用OR,可以使用|。

最新更新