Pandas基于两个不同的列映射列?

2024-06-16 14:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试基于两个不同的列,source和category,创建一个名为“contract\u type”的新列contract_type应该等于源映射的值,除非mobis映射的键在category列中

例如

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_mapsource_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().

我该怎么办


Tags: mapsourcedftypenpallsbcontract