У меня есть dataframe с столбцом "имя" формы ['A', 'B', 'C', A ',' B ',' B '....] и набор массивов: один соответствует "A", скажем, array_A = [0, 1, 2...] и array_B = [3, 1, 0...], array_C и т.д. Я хочу создать новое значение столбца, назначив array_A, где имя строки в dataframe равно "A", а также для "B" и "C".
Функция df['value']=np.where(df['name']=='A',array_A, df['value'])
не будет делать этого, потому что она перезаписывает значения для других имен или имеет вопросы размерности.
Например:
arrays = {'A': np.array([0, 1, 2]),
'B': np.array([3, 1])}
Желаемый результат:
df = pd.DataFrame({'name': ['A', 'B', 'A', 'A', 'B']})
name value
0 A 0
1 B 3
2 A 1
3 A 2
4 B 1
Вы можете использовать цикл for
со словарем:
arrays = {'A': np.array([0, 1, 2]),
'B': np.array([3, 1])}
df = pd.DataFrame({'name': ['A', 'B', 'A', 'A', 'B']})
for k, v in arrays.items():
df.loc[df['name'] == k, 'value'] = v
df['value'] = df['value'].astype(int)
print(df)
name value
0 A 0
1 B 3
2 A 1
3 A 2
4 B 1