У меня есть фрейм данных, который содержит информацию о отображении, как показано ниже:
dfMap = pd.DataFrame({'BId': ['Banana', 'Apple', 'Guava', np.nan, np.nan],
'NId': [np.nan, 'GOne', np.nan, 'GFive','GTwo'],
'Id': ['Banana', 'Apple', 'Guava', 'GFive', 'GTwo']})
print(dfMap)
BId NId Id
0 Banana NaN Banana
1 Apple GOne Apple
2 Guava NaN Guava
3 NaN GFive GFive
4 NaN GTwo GTwo
И у меня есть фрейм входных данных, как показано ниже:
df = pd.DataFrame({'S': ['Banana', 'GTwo', 'Apple', 'GOne', 'Guava', 'GFive'],
'G': ['BI', 'NI', 'BI', 'NI', 'BI', 'NI']})
print(df)
S G
0 Banana BI
1 GTwo NI
2 Apple BI
3 GOne NI
4 Guava BI
5 GFive NI
Теперь я хочу добавить новый столбец df ['Id'] - это отображаемое значение из dfMap, поэтому выходной фрейм данных должен выглядеть следующим образом:
S G Id
0 Banana BI Banana
1 GTwo NI GTwo
2 Apple BI Apple
3 GOne NI Apple
4 Guava BI Guava
5 GFive NI GFive
Я пытался использовать приведенный ниже код, используя np.where, но он выдает ошибку:
mask = df[df['G'] == 'BI']
df['Id'] = np.where(mask, dfMap.loc[df['S'] == dfMap['BId'], 'Id'], dfMap.loc[df['S'] == dfMap['NId'], 'Id'])
ValueError: Can only compare identically-labeled Series objects
Любые мысли, советы, информация, ссылки будут полезны.