2
添加標記專欄中,我有一個像數據幀:大熊貓 - 在數據幀
Client_ID Product_nb Item_id
1 1 i1
1 1 i2
1 1 i3
1 2 i2
1 2 i5
1 2 i7
1 3 i1
1 3 i2
1 3 i4
1 3 i6
2 1 i1
2 1 i2
2 1 i3
2 1 i4
2 2 i1
2 2 i2
... ... ...
所以每個客戶端(client_id
)有幾個產品(Product_nb
)。對於每種產品,我只想保留一件商品(item_id
)。對於同一個客戶,下一個產品不應該與之前的產品相對應。
我要添加每個項目旁邊的一個標誌,如果我需要保留的項目或不:
Client_ID Product_nb Item_id Keep
1 1 i1 1
1 1 i2 0
1 1 i3 0
1 2 i2 1
1 2 i5 0
1 2 i7 0
1 3 i1 0
1 3 i2 0
1 3 i4 1
1 3 i6 0
2 1 i1 1
2 1 i2 0
2 1 i3 0
2 1 i4 0
2 2 i1 0
2 2 i2 1
... ... ... ...
我這個想法是遍歷所有的客戶和產品。對於每個客戶端,保存已保存在列表中的項目:
df = df.set_index(['client_id','product_nb','item_id','keep'])
client_ids = df.index.get_level_values('client_id').unique()
for client in client_ids:
list_already = []
prod_nbs = df.loc[client].index.get_level_values('product_nb').unique()
for prod_nb in prod_nbs:
item_ids = df.loc[client,prod_nb].index.get_level_values('item_id').unique()
for item_id in item_ids:
if (item_id in list_already):
df.loc[client,prod_nb,item_id,'keep'] = 1
continue
else:
list_already.append(item_id)
df.loc[client,prod_nb,item_id,'keep'] = 1
break
但是,這會返回輸入數據幀。
我會很樂意提供任何形式的幫助。謝謝