You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesi贸n a prueba de IA

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

0 D铆as
18 Hrs
49 Min
37 Seg

Caso de Estudio (Parte II). Creaci贸n de columnas

30/32
Resources

How do you calculate additional columns in a dataset?

When working with data, it is critical to understand how we can derive new information to maximize the value of our analysis. This approach is crucial for the data transformation stage, where we convert existing columns into new structures that facilitate deeper analysis. For example, from columns such as quantity and unit price, we can create an additional column called total amount by simply multiplying those columns. This approach also applies to other types of data, such as dates, which can be transformed into time series formats for ease of use.

Creating new columns from existing data

  1. Creating the total amount column:The total amount column is created by multiplying quantity by unit price. This is done as follows in Python code using Pandas:

    data['total amount'] = data['quantity'] * data['unit price'].
  2. Date transformation:When working with dates, it is useful to convert them to a datetime format for later analysis facilities. With Pandas, you can do it like this:

    data['invoice date'] = pd.to_datetime(data['invoice date'])

    This then allows you to extract more specific information, such as year, month, or even time, by creating additional columns:

    data['year'] = data['invoice date'].dt.yeardata['month'] = data['invoice date'].dt.month

What are the advantages of disaggregating time information?

Drilling down temporal information provides a detailed view of the data. Converting dates to datetime data types allows us to segment data by time, which is valuable for identifying trends over specific time periods. This segmentation is vital for financial analysis, especially when reviewing annual, semi-annual or quarterly sales.

Implementing the time breakdown

To create a semi-annual breakdown, we first assign each month to a semester using a lambda function:

data['semester'] = data['month'].apply(lambda x: 1 if x <= 6 else 2).

Subsequently, you can group the data by year and semester to get insights:

sales_per_semester = data.groupby(['year', 'semester'])['total amount'].sum().reset_index().

This grouping allows us to observe the sales distributed in specific time segments, facilitating a comparative analysis between different periods.

How to group and sum data for sales analysis?

By collecting and aggregating sales information by different time segments, we can make informed decisions about consumption patterns and sales performance across different periods.

Annual and semi-annual sales analysis

When breaking down annual and semi-annual sales, we first group the data using the groupby functionality in Pandas. We then sum the sales for each group:

For annual sales:

sales_per_year = data.groupby('year')['total amount'].sum().reset_index().

For semi-annual sales:

sales_per_semester = data.groupby(['year', 'semester'])['total amount'].sum().reset_index().

This provides you with a consolidated dataset that reflects key metrics, allowing you to make strategic assessments and adjustments based on time periods.

Why is it important to generate additional insights from existing data?

Extending data analysis by extracting additional insights fosters a deeper and more actionable understanding of the data. This not only enhances business decision making, but also enriches the strategies to be implemented.

By deriving temporal and categorical data, we visualize trends that are not obvious to the naked eye. In addition, determining quarterly or monthly sales allows us to identify cyclical patterns, demand peaks, or recession periods, shedding light on how to optimize operations and marketing strategies.

In this approach, the reader is invited to apply similar processes and explore further to create meaningful insights that bring value to their particular context.

Contributions 20

Questions 0

Sort by:

Want to see more contributions, questions and answers from the community?

```python #ventas trimnestrales data_cleanded['Quarter']=data_cleanded['Month'].apply(lambda x: 1 if x<=3 else (2 if x<=6 else (3 if x<=9 else 4))) sales_by_semester=data_cleanded.groupby(['Year','Quarter'])['TotalAmount'].sum() print(sales_by_semester) #ventas por mes sales_by_month_year=data_cleanded.groupby(['Year','Month'])['TotalAmount'].sum() print(sales_by_month_year) ```
***Ventas Trimestrales*** ![](https://static.platzi.com/media/user_upload/image-757bd0d3-cc3b-4c8f-99d7-38ae024a6204.jpg)
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. ```python 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 ```python \# Crear una nueva columna calculando el doble de la edad df\['Edad\_doble'] = df\['Edad'] \* 2 print(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 ```python \# Crear una nueva columna con valores basados en una condici贸n df\['Mayor\_de\_30'] = df\['Edad'] > 30 print(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 ```python \# 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 ```python \# 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 ```python \# 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. \#### Ejemplo: ```python \# Crear nuevas columnas utilizando assign() df = df.assign(Edad\_m谩s\_5 = df\['Edad'] + 5, Es\_adulto = df\['Edad'] >= 18) print(df) ``` \### 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 ```python \# 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: ```python 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.
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 ```python # Obtener los 3 mejores paises seg煤n la cantidad de ventas que nos generan top_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铆ses data_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 meses sales_months = data_top_3_country_in_sales.groupby(['Country', 'Year', 'Month'])['Quantity'].sum() print(sales_months) ```
Mi aporte al reto, agrupaci贸n por trimestres y mes `# Creacion de nuevas columnas con nuevos datos a obtener` `df_cleaned["TotalAmount"] = df_cleaned["Quantity"] * df_cleaned["UnitPrice"]df_cleaned["Year"] = df_cleaned["InvoiceDate"].dt.yeardf_cleaned["Month"] = df_cleaned["InvoiceDate"].dt.monthdf_cleaned["Day"] = df_cleaned["InvoiceDate"].dt.daydf_cleaned["Semester"] = df_cleaned["Month"].apply(lambda x:1 if x<=6 else 2) ``# Aqui aplico funcion a la columna para obtener semestre``df_cleaned["Trimestre"] = df_cleaned["Month"].apply(lambda x:1 if x<=3 else 2 if x<=6 else 3 if x<=9 else 4) ``# Aqui aplico funcion a la columna para obtener trimestre` `# Creamos un nuevo df con agrupaciones o informaci貌n especifica ` `sales_by_year = df_cleaned.groupby("Year")["TotalAmount"].sum() ``# aquie agrupa por a帽o``sales_by_semester = df_cleaned.groupby(["Year","Semester"])["TotalAmount"].sum() ``# aquie agrupa por semestre``sales_by_trimestre = df_cleaned.groupby(["Year","Trimestre"])["TotalAmount"].sum() ``# aquie agrupa por trimestre``sales_by_month = df_cleaned.groupby(["Year","Month"])["TotalAmount"].sum() ``# aquie agrupa por mes`
```js data['Trimestre']= data['Mes'].apply(lambda x:1 if x<=3 else 2 if x<=6 else 3 if x<=9 else 4) data['Mensual']= data['Mes'].apply(lambda x:1 if x<=1 else 2 if x<=2 else 3 if x<=3 else 4 if x<=4 else 5 if x<=5 else 6 if x<=6 else 7 if x<=7 else 8 if x<=8 else 9 if x<=9 else 10 if x<=10 else 11 if x<=11 else 12) ```
隆Hola! Este es mi aporte: ```js #Ventas trimestrales data_cleaned['Quarter'] = data_cleaned['InvoiceDate'].dt.quarter sales_by_quarter = data_cleaned.groupby(['Year', 'Quarter'])['TotalAmount'].sum() sales_by_quarter #Ventas mensuales data_cleaned['MonthName'] = data_cleaned['InvoiceDate'].dt.month_name() sales_by_month = data_cleaned.groupby(['Year', 'MonthName'], sort=False)['TotalAmount'].sum() sales_by_month ```
Mi aporte de la ventas por trimestre ```js #creci贸n trimestre y conteo de ventas trimestrales data_cleaned['Quater'] = data_cleaned['Month'].apply(lambda x: 'Q1' if x <= 3 else ('Q2' if x <= 6 else ('Q3' if x <= 9 else 'Q4'))) sales_by_quater = data_cleaned.groupby(['Year' ,'Quater'])['TotalAmount'].sum() sales_by_quater ```
Aparte de que no se habia ejecutado la linea anterior habia un typo "Semestre" en lugar de "Semester" en ingl茅s.
```python #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 ```#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
Ventas por mes: ```python sales_by_month = df_clean.groupby('Month')['TotalAmount'].sum() sales_by_month ```Ventas por trimestre: ```python def quarter(month): if month <= 3: return 1 elif month > 3 and month <= 6 : return 2 elif month > 6 and month <= 9: return 3 else: return 4 df_clean['quarter'] = df_clean['Month'].apply(quarter) df_clean.head() sales_by_quarter = df_clean.groupby(['Year', 'quarter'])['TotalAmount'].sum() sales_by_quarter ```
As铆 quedar铆a el c贸digo para clasificar la informaci贸n por trimestre aplicando una funci贸n lambda a la columna de meses ````python data_cleaned['Trimestre'] = data_cleaned['Month'].apply(lambda x: 1 if x <= 3 else (2 if x <= 6 else (3 if x <= 9 else 4))) sales_by_trimestre = data_cleaned.groupby(['Year', 'Trimestre'])['TotalAmount'].sum() sales_by_trimestre ```data\_cleaned\['Trimestre'] = data\_cleaned\['Month'].apply(lambda x: 1 if x <= 3 else (2 if x <= 6 else (3 if x <= 9 else 4))) sales\_by\_trimestre = data\_cleaned.groupby(\['Year', 'Trimestre'])\['TotalAmount'].sum() sales\_by\_trimestre ````
``` monthly\_sales = data\_cleaned.groupby(\['Year', 'Month'])\['TotalAmount'].sum()monthly\_sales ``` ``` data\_cleaned\['Trimester'] = data\_cleaned\['Month'].apply(lambda x: 1 if x <= 3 else (2 if x <= 6 else 3 ))data\_cleaned.head() ``` ``` trimestral\_sales = data\_cleaned.groupby(\['Year', 'Trimester'])\['TotalAmount'].sum()trimestral\_sales ```
```python data_cleaned['Quarter'] = data_cleaned['Month'].apply(lambda x: 1 if x <= 3 else 2 if x <= 6 else 3 if x <= 9 else 4) ```
Hello all. I share the code for the example: by month: data\_cleaned\['Month']=data\_cleaned\['InvoiceDate'].dt.month sales\_by\_month=data\_cleaned.groupby(\['Year','Month'])\['TotalAmount'].sum()
```python # Calculo la columna por quatrimestre data_cleaned['Quarter']=data_cleaned['Month'].apply(lambda x: 1 if x<=3 else (2 if x<=6 else (3 if x<=9 else 4))) # Realizo un pivot con los datos del a帽o y de cada quarter pivot_table= pd.pivot_table(data_cleaned, values="TotalAmount", index="Year", columns="Quarter",aggfunc="sum") print(pivot_table) ```data\_cleaned\['Quarter']=data\_cleaned\['Month'].apply(lambda x: 1 if x<=3 else (2 if x<=6 else (3 if x<=9 else 4))) pivot\_table= pd.pivot\_table(data\_cleaned, values="TotalAmount", index="Year", columns="Quarter",aggfunc="sum")print(pivot\_table)
## Asignaci贸n de Trimestres Basado en el Mes En este paso, se utiliza una funci贸n llamada Quarterly\_sales para clasificar cada mes en su trimestre fiscal correspondiente. La funci贸n asigna: **-Trimestre 1** para los meses de enero a marzo **-Trimestre 2** para los meses de abril a junio **-Trimestre 3** para los meses de julio a septiembre **-Trimestre 4** para los meses de octubre a diciembre La funci贸n Quarterly\_sales se aplica a la columna month del DataFrame data\_cleaned, creando una nueva columna llamada quarterly sales. Esta nueva columna clasifica cada registro en su trimestre respectivo, facilitando el an谩lisis de los datos de ventas de manera trimestral. ```js def Quarterly_sales(month): if month <= 3: return 'Quarter 1' elif 3 < month <= 6: return 'Quarter 2' elif 6 < month <= 9: return 'Quarter 3' else: return 'Quarter 4' data_cleaned['Quarterly sales'] = data_cleaned['Month'].apply(Quarterly_sales) sales_by_quarter = data_cleaned.groupby(['Year','Quarterly sales'])['Total Amount'].sum() sales_by_quarter Year Quarterly sales 2010 Quarter 4 552372.860 2011 Quarter 1 1487842.180 Quarter 2 1679096.861 Quarter 3 2117546.643 Quarter 4 2441660.880 dtype: float64 ```def Quarterly\_sales(month): if month <= 3: return 'Quarter 1' elif 3 < month <= 6: return 'Quarter 2' elif 6 < month <= 9: return 'Quarter 3' else: return 'Quarter 4' data\_cleaned\['Quarterly sales'] = data\_cleaned\['Month'].apply(Quarterly\_sales)
馃煝 **M茅todos 'eval' y 'query' para operaciones eficientes** En el an谩lisis de datos con Pandas, la eficiencia y claridad en la manipulaci贸n de grandes vol煤menes de informaci贸n son cruciales. En este contexto, las funciones `eval()` y `query()` se destacan como herramientas que optimizan las operaciones sobre el DataFrame. Permitiendo operaciones m谩s r谩pidas y con menos uso de memoria. El m茅todo `eval()` permite evaluar expresiones de cadenas dentro del contexto del DataFrame o Series. ```python df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df.eval('C = A + B', inplace=True) print(df) ``` El m茅todo `query()` permite filtrar datos en un DataFrame usando una sintaxis similar a SQL. Es 煤til para seleccionar filas basadas en condiciones l贸gicas. ```python df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) result = df.query('A > 1') ``` Si utilizas alg煤n tipo de Notebook, puedes utilizar %timeit para medir cu谩nto se demora en una operaci贸n. ```python %timeit df1 + df2 + df3 + df4 %timeit pd.eval('df1 + df2 + df3 + df4') ``` No utilices esto m茅todos en DataFrames peque帽os, porque su eficiencia ser谩 muy poca. **Lo recomendable es utilizarlos en DataFrames de m谩s de 10 000 filas.** Notar谩s la diferencia y reducir谩s costos de computaci贸n si tus modelos est谩n desplegados en la nube. Espero te haya servido. **隆Nunca pares de aprender!** 馃殌馃殌
![](https://static.platzi.com/media/user_upload/image-6cbcdfec-9a33-498c-88d2-c9955059e4ca.jpg)