首页 > 解决方案 > 如何根据在另一个相应列中找到的值覆盖 pandas 中的列?

问题描述

我希望将类别列中的值写为列表中的预先指定的值。我的 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 列中的值。如何实际获取类别列中的值以更改为所需的类别标签?

标签: pythonpandaslistdataframedata-analysis

解决方案


您可以使用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

推荐阅读