Скажем, у меня есть такой фрейм данных:
x y z class
1 2 3 0
2 2 3 0
1 4 5 2
3 2 2 1
Я хотел бы назначить каждому классу свое значение цвета (RGB). Поэтому мне нужно вставить три столбца сразу после столбца z
на основе class
:
x y z r g b class
1 2 3 255 254 253 0
2 2 3 255 254 253 0
1 4 5 0 255 0 2
3 2 2 0 0 255 1
В настоящее время я делаю это так:
# insert three columns
df['r']=0
df['g']=0
df['b']=0
# replace r/g/b values based on `class`
def colorit(dataframe):
colors = [[255, 254, 253], [0, 0, 255], [0, 255, 0]]
for i in range(3):
dataframe.loc[dataframe['c']==i, 'r'] = colors[i][0]
dataframe.loc[dataframe['c']==i, 'g'] = colors[i][1]
dataframe.loc[dataframe['c']==i, 'b'] = colors[i][2]
Но я думаю, что должен быть какой-то способ использовать метод apply
или map
или что-то в этом роде, чтобы сделать это более элегантно и эффективно (с меньшим количеством кода и без циклов).