Transformar un dataset limpio en información útil es el paso que separa la preparación de datos del verdadero análisis. A partir de operaciones simples como multiplicar columnas, convertir tipos de dato y agrupar registros, puedes obtener indicadores de negocio listos para la toma de decisiones. Aquí se explora cómo lograrlo con Pandas, paso a paso.
¿Cómo crear nuevas columnas a partir de las existentes?
Una vez que el dataset está limpio, el siguiente movimiento es pensar qué nuevas columnas pueden derivarse de las que ya existen. En este caso, se cuenta con una columna de cantidad y otra de precio unitario, lo que permite generar el monto total multiplicando ambas [1:00].
La nueva columna se crea asignando un nombre que aún no existe en el dataframe.
La operación se realiza de forma vectorizada, es decir, se aplica a cada fila automáticamente.
Visualizar con head() permite confirmar que el resultado es correcto.
¿Por qué convertir fechas al formato datetime?
El dataset contiene una columna llamada invoice date que inicialmente Pandas interpreta como un simple objeto de texto. Para trabajar con series de tiempo, es necesario convertirla al tipo datetime [2:07].
A simple vista los datos parecen iguales, pero internamente el tipo cambia. Puedes verificarlo con dtypes: antes aparecía como object y después como datetime64 [3:07]. Este cambio es fundamental porque habilita el acceso a propiedades como .dt.year y .dt.month.
¿Cómo desglosar una fecha en año, mes y más?
Con la columna ya en formato datetime, se pueden extraer componentes individuales y crear columnas adicionales [3:40].
En este dataset hay registros de 2010 y 2011, así que el resultado muestra la ganancia acumulada de cada periodo.
¿Cómo calcular ventas por semestre usando una función lambda?
Para un análisis semestral, primero se necesita una columna que indique a qué semestre pertenece cada registro. Esto se logra aplicando una función lambda sobre la columna de mes [6:15].
python
data_limpia['semestre'] = data_limpia['mes'].apply(lambda x: 1 if x <= 6 else 2)
Los meses del 1 al 6 se asignan al semestre 1.
Los meses del 7 al 12 se asignan al semestre 2.
Después se agrupa por año y semestre simultáneamente [7:05].
Un error frecuente al trabajar con notebooks es olvidar ejecutar la celda donde se crea la nueva columna antes de utilizarla. Si aparece un error, basta con correr las celdas en orden [7:45].
¿Qué significa estar en el rol de científico de datos?
Todo lo anterior refleja la tercera etapa del flujo de trabajo: después de la limpieza, el científico de datos evalúa qué transformaciones aportan valor, crea columnas derivadas y genera dataframes resumidos que revelan insights del negocio [8:15]. Los resultados obtenidos, como ventas anuales o semestrales, son la base para reportes y visualizaciones.
El reto propuesto es aplicar la misma lógica para calcular ventas trimestrales y mensuales. Comparte tu solución en los comentarios.
#ventas trimnestralesdata_cleanded['Quarter']=data_cleanded['Month'].apply(lambda x:1if x<=3else(2if x<=6else(3if x<=9else4)))sales_by_semester=data_cleanded.groupby(['Year','Quarter'])['TotalAmount'].sum()print(sales_by_semester)#ventas por messales_by_month_year=data_cleanded.groupby(['Year','Month'])['TotalAmount'].sum()print(sales_by_month_year)
Ventas Trimestrales
#Ventas trimestrales#definmos la función de trimestredeftrimestre(month):if month<=3:return1elif month<=6:return2elif month<=9:return3else:return4#Creamos la columna de trimestro y aplicamos la funcióndata_clened['Trimestrales']= data_clened['Month'].apply(trimestre)data_clened.head()#Datos de ventas totales por trimestresales_by_trimestrales = data_clened.groupby(['Year','Semestre','Trimestrales'])['Total Amount'].sum()sales_by_trimestrales
#Ventas totales por meses#definmos la función de mesesdefmensual(key): meses ={1:'Enero',2:'Febrero',3:'Marzo',4:'Abril',5:'Mayo',6:'Junio',7:'Julio',8:'Agosto',9:'Septiembre',10:'Octubre',11:'Noviembre',12:'Diciembre'}if key in meses:return meses[key]#Crear una columna con los meses data_clened['Mensual']= data_clened['Month'].apply(mensual)data_clened.head()#Datos de ventas totales por meses en textosales_by_mensual = data_clened.groupby(['Year','Semestre','Trimestrales','Mensual'])['Total Amount'].sum()sales_by_mensual
```#Ventas trimestrales #definmos la función de trimestre def trimestre(month): if month<=3 : return 1 elif month<=6 : return 2 elif month<=9 : return 3 else: return 4 #Creamos la columna de trimestro y aplicamos la función data\_clened\['Trimestrales'] = data\_clened\['Month'].apply(trimestre) data\_clened.head() #Datos de ventas totales por trimestre sales\_by\_trimestrales = data\_clened.groupby(\['Year', 'Semestre','Trimestrales'])\['Total Amount'].sum() sales\_by\_trimestrales #Ventas totales por meses #definmos la función de meses def mensual(key): meses = { 1: 'Enero', 2: 'Febrero', 3: 'Marzo', 4: 'Abril', 5: 'Mayo', 6: 'Junio', 7: 'Julio', 8: 'Agosto', 9: 'Septiembre', 10: 'Octubre', 11: 'Noviembre', 12: 'Diciembre' } if key in meses: return meses\[key] #Crear una columna con los meses data\_clened\['Mensual'] = data\_clened\['Month'].apply(mensual) data\_clened.head() #Datos de ventas totales por meses en texto sales\_by\_mensual = data\_clened.groupby(\['Year', 'Semestre','Trimestrales','Mensual'])\['Total Amount'].sum() sales\_by\_mensual
Crear y transformar columnas es una práctica esencial en el preprocesamiento de datos. Estas transformaciones permiten que los datos sean más interpretables y compatibles con los métodos analíticos y modelos que se utilizarán. Sin estas transformaciones, es probable que la calidad del análisis se vea comprometida, y que los modelos no alcancen su máximo rendimiento debido a datos mal preparados o subutilizados. Además, la capacidad de crear nuevas características puede ser un factor clave en la obtención de insights más profundos y en la mejora de la capacidad predictiva de los modelos.
La **creación de columnas** es una operación común en el análisis de datos con bibliotecas como **Pandas**. Puedes crear nuevas columnas basadas en cálculos, transformaciones, combinaciones de otras columnas, o asignar valores predeterminados. Aquí te muestro algunas formas comunes de crear columnas en un DataFrame de **Pandas**.
### 1. **Crear una columna asignando un valor fijo**
Puedes crear una nueva columna y asignar un valor constante a todas las filas.
import pandas as pd
\# Crear un DataFrame de ejemplo
data ={'Nombre': \['Ana','Luis','Carlos','Julia'],  'Edad': \[23, 34, 45, 28]}df = pd.DataFrame(data)
\# Crear una nueva columna asignando un valor constante
df\['Ciudad']='Desconocido'print(df)
### 2. **Crear una columna basada en otra columna**
Puedes crear una columna nueva aplicando una operación matemática o lógica sobre otra columna existente.
#### Ejemplo: Calcular una nueva columna a partir de una columna existente
\# Crear una nueva columna calculando el doble de la edad
df\['Edad\_doble']= df\['Edad'] \*2print(df)
### 3. **Crear una columna basada en condiciones**
Es posible crear columnas que se generen con base en condiciones lógicas aplicadas a otras columnas.
#### Ejemplo: Crear una columna que indique si la persona es mayor de 30 años
\# Crear una nueva columna con valores basados en una condición
df\['Mayor\_de\_30']= df\['Edad']>30print(df)
### 4. **Crear una columna utilizando funciones personalizadas**
Si necesitas aplicar una lógica más compleja, puedes usar el método apply() para aplicar una función a las filas o columnas.
#### Ejemplo: Crear una columna con una función personalizada
\# Definir una función que devuelva una clasificación basada en la edad
def clasificar\_edad(edad):  if edad < 30:  return 'Joven'  elif 30 <= edad < 40:  return 'Adulto Joven'  else:  return 'Mayor'\# Aplicar la función a la columna 'Edad'df\['Clasificación\_Edad']= df\['Edad'].apply(clasificar\_edad)print(df)
### 5. **Crear columnas combinando varias columnas**
Puedes crear una columna combinando los valores de dos o más columnas.
#### Ejemplo: Crear una columna combinada de nombre y edad
\# Crear una nueva columna combinando 'Nombre' y 'Edad'df\['Descripción']= df\['Nombre']+' tiene '+ df\['Edad'].astype(str)+' años.'print(df)
### 6. **Crear una columna con datos categóricos a partir de una variable numérica**
En algunos casos, puedes transformar una variable numérica en categorías.
#### Ejemplo: Crear categorías de edad
\# Crear categorías de edad utilizando pd.cut()df\['Grupo\_Edad']= pd.cut(df\['Edad'], bins=\[0,18,35,50,100], labels=\['Niño','Joven','Adulto','Mayor'])print(df)
### 7. **Crear una columna utilizando el método assign()**
El método assign() de Pandas te permite crear nuevas columnas de una manera funcional y encadenada, lo que puede ser útil cuando realizas múltiples operaciones secuenciales.
### 8. **Crear columnas a partir de expresiones regulares (Regex)**
Si necesitas extraer información de cadenas de texto, puedes utilizar expresiones regulares para crear nuevas columnas.
#### Ejemplo: Extraer la primera letra del nombre
\# Crear una nueva columna extrayendo la primera letra de 'Nombre'df\['Inicial']= df\['Nombre'].str\[0]print(df)
### 9. **Crear columnas a partir de múltiples condiciones con np.select()**
Cuando tienes múltiples condiciones para generar una nueva columna, puedes utilizar np.select() de NumPy para mayor flexibilidad.
#### Ejemplo:
import numpy as np
\# Definir condiciones
condiciones = \[  (df\['Edad'] < 18),  (df\['Edad'] >= 18) & (df\['Edad'] < 35),  (df\['Edad'] >= 35)]
\# Definir los resultados correspondientes
resultados = \['Niño','Joven','Adulto']
\# Crear una nueva columna basada en las condiciones
df\['Categoría\_Edad']= np.select(condiciones, resultados)print(df)
### Conclusión
Crear columnas en Pandas es un proceso flexible que te permite manipular y transformar tus datos según las necesidades del análisis. Puedes crear columnas a partir de cálculos simples, funciones personalizadas, condiciones lógicas, combinaciones de otras columnas, y más.
MOdelo coworcountry o modelo coworculture con muchas actividades para pausas activas y acompañamiento de tu rol profesional Recuerda que Estamos enfocados en atender y brindar espacios para nomadas digitales, teletrabajo y coworking space en Agrolenials Paradise Ecohostel Country Inns contacto directo whatsapp +573206299333 y Faccebook
print("\n--- TOP 5 CLIENTES (PARA FIDELIZACIÓN) ---")
print(clientes.head(5))
--- TOP 5 CLIENTES (PARA FIDELIZACIÓN) ---
Total_Gastado Numero_Pedidos
CustomerID
14646.0 279489.02 2085
18102.0 256438.49 433
17450.0 187482.17 351
14911.0 132572.62 5903
12415.0 123725.45 778
ventas mensuales:
Ventas por trimestre:
# Ejercicios de Manipulacion total ventas por trimestre y mes# Total ventas por trimestredefquarter(month):if month in[1,2,3]:return1elif month in[4,5,6]:return2elif month in[7,8,9]:return3else:return4df_cleaned['Quarter']= df_cleaned['Month'].apply(quarter)sales_by_quarter = df_cleaned.groupby(['Year','Quarter'])['TotalAmount'].sum()print("Total ventas por trimestre:\n", sales_by_quarter)# Total ventas por mesdefmensual(month): meses ={1:'Enero',2:'Febrero',3:'Marzo',4:'Abril',5:'Mayo',6:'Junio',7:'Julio',8:'Agosto',9:'Septiembre',10:'Octubre',11:'Noviembre',12:'Diciembre'}if month in meses:return meses[month]else:return'No es un mes valido'df_cleaned['Monthly']= df_cleaned['Month'].apply(mensual)sales_by_month = df_cleaned.groupby(['Year','Monthly'])['TotalAmount'].sum()print("Total ventas por mes:\n", sales_by_month)# Total ventas consolidado desglosado por año, semestre, trimestre y messales_by_consolidated = df_cleaned.groupby(['Year','Semester','Quarter','Monthly'])['TotalAmount'].sum()print("Total ventas consolidado desglosado por año, semestre, trimestre y mes:\n", sales_by_consolidated)
Ventas trimestrales
Ventas Mensuales
Ventas por mes
Ventas por trimestre
#Homologación de valores de la columna 'Description'.
Teniendo en cuenta que cada valor c en la columna 'Description', logré homologar varios campos con la columna 'StockCode' con el siguiente codigo.
Mi aporte para el reto:
#creamos una columna para los trimestresdata_cleaned['Trimester'] = data_cleaned['Month'].apply(lambda x: 'T1' if x <= 3 else 'T2' if x <= 6 else 'T3' if x <= 9 else 'T4')sales_by_trimester = data_cleaned.groupby(['Year','Trimester'])['TotalAmount'].sum()sales_by_trimester
#Para generar un reporte mensual no debemos crear mas columnas solo variable para almacenar la operacionsales_by_month = data_cleaned.groupby(['Year','Month'])['TotalAmount'].sum()sales_by_month
El resultado:
Yo hallé un insight que espero sera importante para cuando se realiza análisis de datos.
Hallar cuáles son las ventas de cada mes para los tres primeros países que nos generan más ventas
# Obtener los 3 mejores paises según la cantidad de ventas que nos generantop_3_country = data_cleaned.groupby('Country')['Quantity'].sum().sort_values(ascending=False).head(3)print(top_3_country)# Crear un nuevo dataset en base a los 3 paísesdata_top_3_country_in_sales = data_cleaned[(data_cleaned['Country']=='United Kingdom')|(data_cleaned['Country']=='Netherlands')|(data_cleaned['Country']=='EIRE')]# Conocer si los 3 países han hecho compras en todo el año o solo en algunos mesessales_months = data_top_3_country_in_sales.groupby(['Country','Year','Month'])['Quantity'].sum()print(sales_months)
Esta fue mi solucion al reto def trimestre(mes): if mes in [1,2,3]: return "Primer Trimestre" elif mes in [4,5,6]: return "Segundo Trimestre" elif mes in [7,8,9]: return "Tercer Trimestre" else: return "Cuarto Trimestre"