## 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できました。いい感じ。

おすすめの記事