我想创建一个新列,对另一列的值进行分类,但在应用 lambda 后出现 ValueError

I want to create a new column which categorizes values from another column but i get a ValueError after applying lambda

我想创建一个新列,将制造商列中的值分类到它们的来源内容,例如大众汽车的欧洲。制造商列中的值是对象。

我正在尝试使用以下功能:

def  func(region):
    if auto2['manufacturer'] == 'Audi':
        return 'Europa'
    elif auto2['manufacturer'] == 'Land Rover':
        return 'Europa'
    elif auto2['manufacturer'] == 'Volkswagen':
        return 'Europa'
    elif auto2['manufacturer'] == 'Chevrolet':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Jeep':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Dodge':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Ford':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Lincoln':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Mercury':
        return 'Verenigde Staten'
    elif auto2['manufacturer'] == 'Pontiac':
        return 'Verenigde Staten'
    else: 
        return 'Asia'

auto2['Region'] = auto2['manufacturer'].apply(lambda x: region)

定义函数工作正常,但是当我执行应用函数时出现以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有什么方法可以修复我的代码,或者有没有更好的方法来创建一个新列来对另一列的值进行分类?

有一种更简单的方法可以做到这一点。首先,定义一个字典(但包含所有值而不仅仅是这四个):

manufacturer_regions = {
    'Audi': 'Europa',
    'Land Rover': 'Europa',
    'Jeep': 'Verenigde Staten',
    'Dodge': 'Verenigde Staten'
}

然后将它应用到 manufacturer 列:

auto2['region'] = auto2.manufacturer.apply(lambda x: manufacturer_regions[x])