Todavía estoy aprendiendo Python y me gustaría pedir su ayuda con el siguiente problema:
Tengo un archivo CSV con los datos diarios y estoy buscando una solución para resumir por semanas calendario. Así que para los datos maqueta continuación he filas se extendían más de 2 semanas (semana 14 (semana actual) y 13 semanas (la semana pasada)). Ahora tengo que encontrar una manera de agrupar filas por semana calendario, reconocen que año al que pertenecen y calcular la suma semanas y semanas de media. En el ejemplo de entrada de archivo que sólo hay dos identificadores diferentes. Sin embargo, en el archivo de datos real que espero muchos más.
input.csv
id date activeMembers
1 2020-03-30 10
2 2020-03-30 1
1 2020-03-29 5
2 2020-03-29 6
1 2020-03-28 0
2 2020-03-28 15
1 2020-03-27 32
2 2020-03-27 10
1 2020-03-26 9
2 2020-03-26 3
1 2020-03-25 0
2 2020-03-25 0
1 2020-03-24 0
2 2020-03-24 65
1 2020-03-23 22
2 2020-03-23 12
...
deseada OUTPUT.CSV
id week WeeklyActiveMembersSum WeeklyAverageActiveMembers
1 202014 10 1.4
2 202014 1 0.1
1 202013 68 9.7
2 202013 111 15.9
mi objetivo es:
import pandas as pd
df = pd.read_csv('path/to/my/input.csv')
Aquí que había necesidad de agrupar por 'id' + 'fecha' columna (por semana Calendario - no estoy seguro si esto es posible) y crear una columna de 'semana' con el número de la semana, y luego sumar valores '' Miembros activos de la semana en particular , guardar como columna 'WeeklyActiveMembersSum' en mi archivo de salida y, finalmente, calcular '' weeklyAverageActiveMembers para la semana en particular. Estaba experimentando con GroupBy y parámetros ISIN pero sin suerte hasta ahora ... ¿Tendría que ir con algo similar a esto:
df.groupby('id', as_index=False).agg({'date':'max',
'activeMembers':'sum'}
y finalmente salvar a todos como OUTPUT.CSV:
df.to_csv('path/to/my/output.csv', index=False)
¡Gracias por adelantado!
Parece que estoy recibiendo un entorno semana diferente que lo hace:
# should convert datetime column to datetime type
df['date'] = pd.to_datetime(df['date'])
(df.groupby(['id',df.date.dt.strftime('%Y%W')], sort=False)
.activeMembers.agg([('Sum','sum'),('Average','mean')])
.add_prefix('activeMembers')
.reset_index()
)
Salida:
id date activeMembersSum activeMembersAverage
0 1 202013 10 10.000000
1 2 202013 1 1.000000
2 1 202012 68 9.714286
3 2 202012 111 15.857143