## idでグルーピングし、その中でsalesが最も小さいレコードを抽出する df.loc[df.groupby('id')['sales'].idxmin()]
なお、上記の、idxminのコードを idxmaxに変えれば最大値を取得可能
ちなみに、SQLを使って、上記コードを書くと以下のようなイメージです。
SELECT id, MIN(sales) as min_sales FROM df GROUP BY id
SQLだとグルーピングはサクッとかけてわかりやすいのですが、プログラムだと意外に大変だったりします。最初は結構コード数多くなりそう。と思ってたのですが調べてみたら、pythonは1行でgroup byできました。いい感じ。