Dividir un dataframe columna con una pandas de la serie en varias columnas

0

Pregunta

Tengo un pandas dataframe con muchas columnas. Uno de ellos es una serie. Quiero dividir la columna en un conjunto de booleanos columnas. Por lo tanto, si el valor en una fila ['Rojo','Caliente','Verano'], quiero 3 columnas: Rojo (tener valor 1), Caliente (tener valor 1) y de Verano (tener valor 1).

Ejemplo:

df = pd.DataFrame({'Owner': ['Bob', 'Jane', 'Amy'],
               'Make': ['Ford', 'Ford', 'Jeep'],
               'Model': ['Bronco', 'Bronco', 'Wrangler'],
               'Sentiment': [['Meh','Red','Dirty'], ['Rusty','Sturdy'], ['Dirty','Red']],
               'Max Speed': [80, 150, 69],
              'Customer Rating': [90, 50, 91]})

nos da:

enter image description here

Ahora quiero que esta salida: enter image description here (Verdadero/Falso podría ser de unos y ceros, también. Igual de buena).

nota: he mirado este post de abajo: Dividir un Pandas columna de las listas en varias columnas pero eso sólo funciona si la serie no es ya forma parte de la DF.

cualquier ayuda apreciada!

dataframe pandas python
2021-11-24 02:59:52
2

Mejor respuesta

2

Trate de explode entonces crosstab y join

s = df.Sentiment.explode()
out = df.join(pd.crosstab(s.index,s).astype(bool))
out
  Owner  Make     Model          Sentiment  ...    Meh    Red  Rusty  Sturdy
0   Bob  Ford    Bronco  [Meh, Red, Dirty]  ...   True   True  False   False
1  Jane  Ford    Bronco    [Rusty, Sturdy]  ...  False  False   True    True
2   Amy  Jeep  Wrangler       [Dirty, Red]  ...  False   True  False   False
[3 rows x 11 columns]
2021-11-24 14:07:56
0

Intente esto:

df = pd.concat([df, pd.get_dummies(df['Sentiment'].explode())], axis=1)

Salida:

>>> df
  Owner  Make     Model             Sentiment  Max Speed  Customer Rating  AWESOME  Dirty  LOVE  Meh  Red  Rusty  Sturdy
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      0     0    1    0      0       0
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      0     0    0    1      0       0
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      1     0    0    0      0       0
1  Jane  Ford    Bronco       [Rusty, Sturdy]        150               50        0      0     0    0    0      1       0
1  Jane  Ford    Bronco       [Rusty, Sturdy]        150               50        0      0     0    0    0      0       1
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        0      0     1    0    0      0       0
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        1      0     0    0    0      0       0
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        0      0     0    0    1      0       0

Cómo funciona

Lo que estás buscando es llamado generalmente de una bañera de codificación, y hay un método en pandas sólo para eso: get_dummies(). Se necesita una Serie (o DataFrame) y crea una nueva columna para cada valor único de la Serie (o DataFrame).

df['Sentiment'].explode() crea una nueva columna, que contiene todos los valores individuales de todas las listas en la columna seleccionada(s).

2021-11-24 03:25:47

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................