Tengo un marco de datos:

  id  |   x   |   y 
   1  |  0.3  |  0.4
   1  |  0.2  |  0.5
   2  |  0.1  |  0.6
   2  |  0.9  |  0.1
   3  |  0.8  |  0.2
   3  |  0.7  |  0.3

¿Cómo puedo agregar una nueva columna al marco de datos en relación con la columna de identificación?

Por ejemplo:

  id  |   x   |   y   |  color
   1  |  0.3  |  0.4  | 'green'
   1  |  0.2  |  0.5  | 'green'
   2  |  0.1  |  0.6  | 'black'
   2  |  0.9  |  0.1  | 'black'
   3  |  0.8  |  0.2  |  'red'
   3  |  0.7  |  0.3  |  'red'
0
gal leshem 30 dic. 2019 a las 18:54

2 respuestas

Probablemente tarde, pero si quieres alternativas, aquí hay otra forma con una función simple:

colors = ['Green', 'Black', 'Red']

def color(data):
    if data['id'] == 1:
        col = colors[0]
    if data['id'] == 2:
        col = colors[1]
    if data['id'] == 3:
        col = colors[2]
    return col

df['Colors'] = df.apply(color, axis = 1)
print(df)

#    id    x    y Colors
# 0   1  0.3  0.4  Green
# 1   1  0.2  0.5  Green
# 2   2  0.1  0.6  Black
# 3   2  0.9  0.1  Black
# 4   3  0.8  0.2    Red
# 5   3  0.7  0.3    Red
0
Giuseppe 30 dic. 2019 a las 18:58

Por lo tanto, su función no devuelve nombres de color, sino los valores RGB, si esto es lo que desea en la columna de color, cree el diccionario primero a partir de los valores de identificación únicos y aplique el diccionario de la manera @ anky_91 mencionada en los comentarios.

d={x:random_color() for x in df.id.unique()}
df['color']=df['id'].map(d)
1
Rafal Janik 30 dic. 2019 a las 16:25