Pandas Map列基于两个不同的列?

时间:2018-04-30 16:35:17

标签: python pandas numpy

我正在尝试根据两个不同的列(源和类别)创建一个名为“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_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().

我该怎么做?

0 个答案:

没有答案