Pandas Map столбцы на основе двух разных столбцов? - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать новый столбец с именем 'contract_type', основанный на двух разных столбцах: источник и категория. contract_type должно равняться значениям из source_map, за исключением случаев, когда ключи mobis_map находятся в столбце категории.

Например,

source  category
ALLIAN      ALL                 
ALLSB       ASB                 
00CORP  100 01
00CORP  847 1

Карты для

source  category  contact_type
ALLIAN      ALL      ALLIAN           
ALLSB       ASB      ALLSB         
ALLSB       ASB      ALLSB          
00CORP  100 01       00CORP
00CORP  847 1        MOBIS

, где mobis_map и source_map равны

source_map = {
        'ALLIAN': 'ALLIAN',
        'ALLSB': 'ALLIAN SB',
        '8ASTARS2': '8a STARS',
        '70': 'IT 70',
        'OASIS': 'OASIS',
        'OASIS SB': 'OASIS SB',
        'VETS2': 'VETS',
        '00CORP': '00CORP',
    }


mobis_map = {
        '874 1': 'MOBIS',
        '874 4': 'MOBIS',
        '874 6': 'MOBIS',
        '874 7': 'MOBIS',
        '874 8': 'MOBIS',
        '874 9': 'MOBIS',
    }

Я попытался сначала просто отобразить все на исходной карте как таковое,

df['contract_type'] = df['contract_type'].map(source_map)

и затем использовать np.where для второго условного,

df['contract_type'] = np.where(
        df['category'] in list(mobis_map.keys()),
        df['contract_type'].map(mobis_map),
        df['contract_type']
    )

Но я продолжаю получать ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Как бы я поступил об этом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...