顧客のリストと顧客が購入した製品のインスタンスを含むデータフレームがあります。特定の製品を少なくとも1回購入したすべての顧客を除外する新しいデータフレームを取得しようとしています。例えば:
d = {'Customer': ['Cust 1', 'Cust 1', 'Cust 2', 'Cust 1', 'Cust 2', 'Cust 2', 'Cust 3', 'Cust 3'],
'Product': [1, 1, 2, 1, 1, 2, 2, 1],
'PO': ['P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8']}
df = pd.DataFrame(data=d)
df
出力
| |Customer |Product |PO |
| |:--------|:---------|:---------|
|0| Cust 1 | 1 | P1 |
|1| Cust 1 | 1 | P2 |
|2| Cust 2 | 2 | P3 |
|3| Cust 1 | 1 | P4 |
|4| Cust 2 | 1 | P5 |
|5| Cust 2 | 2 | P6 |
|6| Cust 3 | 2 | P7 |
|7| Cust 3 | 1 | P8 |
他に何を購入したかに関係なく、いつでも製品2を購入した顧客を除外できるようにしたいと思います。
| |Customer |Product |PO |
| |:--------|:---------|:---------|
|0| Cust 1 | 1 | P1 |
|1| Cust 1 | 1 | P2 |
|2| Cust 1 | 1 | P4 |
これを行う方法はありますか?どんな助けでも大歓迎です!
あなたはそれをいくつかの方法で行うことができます:
groupby
とfilter
とall
: df.groupby('Customer').filter(lambda x: (x['Product'] != 2).all())
groupby
付きtransform
およびall
ブールインデックス付きの使用: df[df.groupby('Customer')['Product'].transform(lambda x: (x != 2).all())]
出力:
Customer Product PO
0 Cust 1 1 P1
1 Cust 1 1 P2
3 Cust 1 1 P4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加