質問: お久しぶりです。 今回は 日付、商品名、売価、売数 が入ったデータを使っています。 特売などで売価が変わった商品をのぞいて、ずっと売価が変わらない商品のみを抽出したい場合の書き方が思いつきません。 | 日 | 商品名 | 売価 | 売数 | | --- | --- | --- | --- | | 2020-01-01 | マシュマロ | 110 | 2 | | 2020-01-02 | マシュマロ | 110 | 5 | | 2020-01-02 | オレオの白い部分 | 100 | 2 | | 2020-01-02 | マカロン | 120 | 4 | | 2020-01-03 | マシュマロ | 100 | 10 | | 2020-01-03 | オレオの白い部分 | 100 | 0 | | 2020-01-03 | マカロン | 120 | 7 | | ... | ... | ... | ... | 上記のようなデータがあるとして、マシュマロは売価が変わっているので "マシュマロ以外の商品のデータのみ" を取ってきたいのです。 "商品名"のuniqueと"日"でループを回して"売価"が変わらない物を持って来る・・・と言う感じの書き方かな...というところまで考えたのですが、書き方が本当にわかりません。無知は恥なのは承知で質問しています... よければお力をお貸しいただければ幸いです。
回答: ジャストアイデアですが。 ``` df.groupby('商品名')['売価'].apply(lambda d : d.nunique()) ``` のようにして、 各商品名に対する `売価`の `nunique()` を求め、その結果が`1` の商品のみをフィルタリングするとよいのではな いでしょうか ``` tmp = df.groupby('商品名')['売価'].apply(lambda d : d.nunique()) ret = df[df['商品名'].isin(tmp[tmp == 1].index)] ```