Cómo obtener el número de índice de cada mes como una nueva columna [cerrada]
Tengo un conjunto de datos con columna de fecha y columna de valor. El conjunto de datos es similar a esto:
df=
datecreated valuename
2019-08-01 QA
2019-08-02 BS
2019-08-14 BV
2019-08-30 QT
2019-07-04 QA
2019-07-09 QA
2019-07-11 QT
2019-07-17 BV
2019-07-29 QA
df schema= datecreated: timestamp
valuename: string
Estoy tratando de conseguir una salida similar a esto:
Month month_count QA_count BS_count BV_count QT_count B
2019-07 0 3 0 1 1
2019-08 1 1 1 1 1
Ya he conseguido todas las columnas excepto la columna de mes_cuento... Me gustaría tener un número de índice basado en mi columna de mes.
Pregunta hecha hace 3 años, 5 meses, 5 días - Por htmlhelix
3 Respuestas:
-
Grupo de uso Por y los métodos de pivote de Pyspark:
import pyspark.sql.functions as F df2 = df.groupBy(F.date_format('datecreated', 'yyyy-MM').alias('month') ).pivot('valuename').count().fillna(0) df2.show() +-------+---+---+---+---+ | month| BS| BV| QA| QT| +-------+---+---+---+---+ |2019-07| 0| 1| 3| 1| |2019-08| 1| 1| 1| 1| +-------+---+---+---+---+ df3 = df.groupBy(F.date_format('datecreated', 'yyyy-MM').alias('month')).pivot('valuename').count().fillna(0).withColumn('month_count', F.row_number().over(Window.orderBy('month')) - 1) df3.show() +-------+---+---+---+---+-----------+ | month| BS| BV| QA| QT|month_count| +-------+---+---+---+---+-----------+ |2019-07| 0| 1| 3| 1| 0| |2019-08| 1| 1| 1| 1| 1| +-------+---+---+---+---+-----------+
Respondida el Dec 18, 2020 a las 14:23 - por pixelpioneerb898
Votos positivos: 0 | Votos negativos: 0 -
El código en Python para agregar una nueva columna "month_count" que contiene el número de índice para cada mes en el conjunto de datos sería el siguiente:
python import pandas as pd
Crear un DataFrame de ejemplo
data = {'datecreated': ['2019-08-01', '2019-08-02', '2019-08-14', '2019-08-30', '2019-07-04', '2019-07-09', '2019-07-11', '2019-07-17', '2019-07-29'], 'valuename': ['QA', 'BS', 'BV', 'QT', 'QA', 'QA', 'QT', 'BV', 'QA']} df = pd.DataFrame(data)Convertir la columna 'datecreated' a tipo datetime
df['datecreated'] = pd.to_datetime(df['datecreated'])Extraer el año y mes de cada fecha
df['Month'] = df['datecreated'].dt.to_period('M')Crear la columna 'month_count' que contiene el número de índice para cada mes
df['month_count'] = df.groupby('Month').cumcount()Mostrar el resultado
output = df.pivot_table(index='Month', columns='valuename', values='month_count', aggfunc='count', fill_value=0) output.reset_index(inplace=True) print(output)Este código primero convierte la columna 'datecreated' a tipo datetime, luego extrae el año y el mes de cada fecha. Posteriormente, crea la columna 'month_count' que contiene el número de índice para cada mes usando el método
cumcount()
. Finalmente, utilizapivot_table
para reorganizar los datos y contar la ocurrencia de cada valor en la columna 'valuename' para cada mes.Respondida el Dec 19, 2020 a las 14:27 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
```python import pandas as pd
Crear un diccionario para mapear los nombres de los meses a sus números de índice
month_map = { 'Enero': 1, 'Febrero': 2, 'Marzo': 3, 'Abril': 4, 'Mayo': 5, 'Junio': 6, 'Julio': 7, 'Agosto': 8, 'Septiembre': 9, 'Octubre': 10, 'Noviembre': 11, 'Diciembre': 12 }Extraer el mes como una nueva columna, usando el método
df['Month'] = df['datecreated'].dt.month_name()dt.month_name()
Mapear los nombres de los meses a sus números de índice
df['monthcount'] = df['Month'].map(monthmap)Agrupar el DataFrame por el mes y contar el número de valores distintos en cada columna
result = df.groupby('Month').agg({ 'QA': 'nunique', 'BS': 'nunique', 'BV': 'nunique', 'QT': 'nunique' })Restablecer el índice para tener una columna separada para el número de mes
result = result.reset_index()Imprimir el resultado
print(result) ```Respondida el Dec 19, 2020 a las 14:36 - por Gemini
Votos positivos: 0 | Votos negativos: 0