veces value_counts una tabla repite repeticiones recorrer que numero mas lista frecuencias encontrar elemento ejemplos data cuantas contar python pandas

python - value_counts - Creación condicional de pandas de una columna serie/marco de datos



value_counts pandas (5)

Aquí hay otra forma de desollar a este gato, usando un diccionario para mapear nuevos valores en las teclas de la lista:

def map_values(row, values_dict): return values_dict[row] values_dict = {''A'': 1, ''B'': 2, ''C'': 3, ''D'': 4} df = pd.DataFrame({''INDICATOR'': [''A'', ''B'', ''C'', ''D''], ''VALUE'': [10, 9, 8, 7]}) df[''NEW_VALUE''] = df[''INDICATOR''].apply(map_values, args = (values_dict,))

Cómo se ve:

df Out[2]: INDICATOR VALUE NEW_VALUE 0 A 10 1 1 B 9 2 2 C 8 3 3 D 7 4

Este enfoque puede ser muy poderoso cuando tiene que hacer muchas sentencias ifelse - ifelse (es decir, muchos valores únicos para reemplazar).

Y, por supuesto, siempre puedes hacer esto:

df[''NEW_VALUE''] = df[''INDICATOR''].map(values_dict)

Pero ese enfoque es más de tres veces más lento que el enfoque apply desde arriba, en mi máquina.

Y también puedes hacer esto, usando dict.get :

df[''NEW_VALUE''] = [values_dict.get(v, None) for v in df[''INDICATOR'']]

Tengo un marco de datos en la línea del siguiente:

Type Set 1 A Z 2 B Z 3 B X 4 C Y

Quiero agregar otra columna al marco de datos (o generar una serie) de la misma longitud que el marco de datos (= igual número de registros / filas) que establece un color verde si Set = ''Z'' y ''rojo'' si Set = de lo contrario .

¿Cuál es la mejor manera de hacer esto?


La comprensión de la lista es otra forma de crear otra columna condicionalmente. Si está trabajando con dtipos de objetos en columnas, como en su ejemplo, las listas de comprensión generalmente superan a la mayoría de los otros métodos.

Ejemplo de lista de comprensión:

df[''color''] = [''red'' if x == ''Z'' else ''green'' for x in df[''Set'']]

% de pruebas de tiempo:

import pandas as pd import numpy as np df = pd.DataFrame({''Type'':list(''ABBC''), ''Set'':list(''ZZXY'')}) %timeit df[''color''] = [''red'' if x == ''Z'' else ''green'' for x in df[''Set'']] %timeit df[''color''] = np.where(df[''Set'']==''Z'', ''green'', ''red'') %timeit df[''color''] = df.Set.map( lambda x: ''red'' if x == ''Z'' else ''green'') 1000 loops, best of 3: 239 µs per loop 1000 loops, best of 3: 523 µs per loop 1000 loops, best of 3: 263 µs per loop


Lo siguiente es más lento que los enfoques cronometrados here , pero podemos calcular la columna adicional en función del contenido de más de una columna, y se pueden calcular más de dos valores para la columna adicional.

Ejemplo simple usando solo la columna "Establecer":

def set_color(row): if row["Set"] == "Z": return "red" else: return "green" df = df.assign(color=df.apply(set_color, axis=1)) print(df)

Set Type color 0 Z A red 1 Z B red 2 X B green 3 Y C green

Ejemplo con más colores y más columnas tomadas en cuenta:

def set_color(row): if row["Set"] == "Z": return "red" elif row["Type"] == "C": return "blue" else: return "green" df = df.assign(color=df.apply(set_color, axis=1)) print(df)

Set Type color 0 Z A red 1 Z B red 2 X B green 3 Y C blue


Otra forma en que esto se puede lograr es

df[''color''] = df.Set.map( lambda x: ''red'' if x == ''Z'' else ''green'')


df[''color''] = np.where(df[''Set'']==''Z'', ''green'', ''red'')

Por ejemplo,

import pandas as pd import numpy as np df = pd.DataFrame({''Type'':list(''ABBC''), ''Set'':list(''ZZXY'')}) df[''color''] = np.where(df[''Set'']==''Z'', ''green'', ''red'') print(df)

rendimientos

Set Type color 0 Z A green 1 Z B green 2 X B red 3 Y C red

Si tenía más condiciones, use np.select . Por ejemplo, si quieres que el color sea

  • yellow cuando (df[''Set''] == ''Z'') & (df[''Type''] == ''A'')
  • de lo contrario, blue cuando (df[''Set''] == ''Z'') & (df[''Type''] == ''B'')
  • de lo contrario purple cuando (df[''Type''] == ''B'')
  • de lo contrario black ,

luego usa

df = pd.DataFrame({''Type'':list(''ABBC''), ''Set'':list(''ZZXY'')}) conditions = [ (df[''Set''] == ''Z'') & (df[''Type''] == ''A''), (df[''Set''] == ''Z'') & (df[''Type''] == ''B''), (df[''Type''] == ''B'')] choices = [''yellow'', ''blue'', ''purple''] df[''color''] = np.select(conditions, choices, default=''black'') print(df)

cuyos rendimientos

Set Type color 0 Z A yellow 1 Z B blue 2 X B purple 3 Y C black