簡體   English   中英

熊貓-在數據框中添加標志列

[英]Pandas - Add a flag column in dataframe

我有一個像這樣的數據框:

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

但這會返回我輸入數據幀。

我將竭誠為您提供任何幫助。 謝謝

在熊貓中,您通常不希望遍歷DataFrame。 它很慢,並且幾乎所有東西都有更多優化的例程。 就你而言

df.groupby(['Client_ID', 'Product_nb'])['Item_id'].first()

做這份工作。 用DataFrame的名稱替換df

編輯:我過度理解了約束,您選擇的值應該是唯一的。 最好事先過濾值,然后再過濾groupby

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM