Pandas:只显示每个id具有最小值的行

Pandas: show only the rows that have the minimum value for each id

假设我有一个像这样的 DataFrame:

id length width
2 12 12
2 13 15
4 14 19
4 11 13
7 34 67
7 33 64
7 40 78
7 22 33

我想要的是,id 的数字应该只显示一次并且它应该只显示具有 length[ 的列的最小值的行=25=].

结果将是:

id length width
2 12 12
4 11 13
7 22 33

试试

out = df.loc[df.groupby('id')['length'].idxmin()]
Out[220]: 
   id  length  width
0   2      12     12
3   4      11     13
7   7      22     33

我相信您在其他答案的评论中更新了您的请求。我提供了一些代码,应该可以让您获得预期的结果

df_pos = df.loc[df.mask(df['length'].ge(0)).dropna().groupby('id')['length'].idxmax()].reset_index().drop('index', axis = 1)
df_neg = df.loc[df.mask(df['length'].lt(0)).dropna().groupby('id')['length'].idxmin()].reset_index().drop('index', axis = 1)
df_con = pd.concat([df_pos, df_neg]).sort_values('id')
df_con