簡體   English   中英

如何根據在另一個對應列中找到的值覆蓋 pandas 中的列?

[英]How to write over a column in pandas based on the value found in another corresponding column?

我希望將類別列中的值寫為列表中的預先指定的值。 我的DataFrame的頭部是這樣的:

                       Product Category
0           Macbook Pro Laptop        -
1           LG Washing Machine        -
2         USB-C Charging Cable        -
3             27in FHD Monitor        -
4         USB-C Charging Cable        -
5        AA Batteries (4-pack)        -
6         USB-C Charging Cable        -
7         USB-C Charging Cable        -
8   Bose SoundSport Headphones        -
9       AAA Batteries (4-pack)        -
10        USB-C Charging Cable        -
11             ThinkPad Laptop        -
12       AA Batteries (4-pack)        -
13      AAA Batteries (4-pack)        -
14        USB-C Charging Cable        -

我想用列表中預先指定的值替換 Category 列,如下所示:

con_elec = ['20in Monitor', 
         '27in 4K Gaming Monitor', 
         '27in FHD Monitor', 
         '34in Ultrawide Monitor', 
         'Flatscreen TV', 
         'Google Phone', 
         'Macbook Pro Laptop', 
         'ThinkPad Laptop', 
         'Vareebadd Phone', 
         'iPhone']
elec_acc = ['AA Batteries (4-pack)',
            'AAA Batteries (4-pack)', 
            'Apple Airpods Headphones',
            'Bose SoundSport Headphones',
            'Lightning Charging Cable',
            'USB-C Charging Cable',
            'Wired Headphones']
house_app = ['LG Dryer',
             'LG Washing Machine']

我想測試一下 Product 列中的值是否在以下列表之一中,然后將 Category 列中的“-”替換為產品所屬的相應類別。

我嘗試使用以下 if 語句:

for product in df['Product']:
    if product in con_elec == True:
        df['Category'] = 'Consumer Electronics'
    elif product in elec_acc == True:
        df['Category'] = 'Electronic Accessories'
    elif product in house_app == True:
        df['Category'] = 'Household Appliances'

此代碼運行無誤,但不會更改 DataFrame 的 Category 列中的值。 我如何 go 關於實際獲取類別列中的值以更改為所需的類別 label?

您可以使用pandas.Series.map

d = {}
for v, lst in [('Consumer Electronics', con_elec), ('Electronic Accessories', elec_acc), ('Household Appliances', house_app)]:
    for vv in lst:
        d[vv] = v

df['Category'] = df['Product'].map(d)

print(df)

印刷:

                       Product                Category
0           Macbook Pro Laptop    Consumer Electronics
1           LG Washing Machine    Household Appliances
2         USB-C Charging Cable  Electronic Accessories
3             27in FHD Monitor    Consumer Electronics
4         USB-C Charging Cable  Electronic Accessories
5        AA Batteries (4-pack)  Electronic Accessories
6         USB-C Charging Cable  Electronic Accessories
7         USB-C Charging Cable  Electronic Accessories
8   Bose SoundSport Headphones  Electronic Accessories
9       AAA Batteries (4-pack)  Electronic Accessories
10        USB-C Charging Cable  Electronic Accessories
11             ThinkPad Laptop    Consumer Electronics
12       AA Batteries (4-pack)  Electronic Accessories
13      AAA Batteries (4-pack)  Electronic Accessories
14        USB-C Charging Cable  Electronic Accessories

您可以創建一個自定義 function 並將maplambda一起使用。 還請記住,當您in == True中使用時誇大其詞,您可以避免使用它:

def replacers(x):
    if x in con_elec:
        return 'Consumer Electronics'
    elif x in elec_acc:
        return 'Electronic Accessories'
    elif x in house_app:
        return 'Household Appliances'

接着:

df['Category'] = df['Category'].map(lambda x: replacers(x))

暫無
暫無

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

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