Estoy usando pandas para analizar un archivo CSV. El archivo CSV contiene un valor para cada día de los últimos 10 años.

La CSV se ve así:

production,day,year
5.0,50,2015
80.0,51,2015
190.0,52,2015
10.0,53,2015
.
.
.
2.0,50,2016
2.0,51,2016
40.0,52,2016
20.0,53,2016
.
.

Yo uso el siguiente código:

def calcAverageFirstYears(productionCSV):

    myFile = pd.read_csv(productionCSV)

    result = myFile[myFile['day']==52]
    print(result)

Entonces obtengo este resultado:

   production   day    year
2       190.0  52.0  2015.0
9        40.0  52.0  2016.0
16       60.0  52.0  2017.0
23        6.0  52.0  2018.0

¿Cómo puedo calcular el promedio de estos valores? ¿Cómo puedo calcular el promedio de 2015 y 2016?

Gracias por su ayuda

0
relash 22 feb. 2018 a las 13:12

3 respuestas

La mejor respuesta

Uso:

#if want mean of column production
print(result['production'].mean())

Y:

#if want mean of filtered year - 2015 and 2016 only
print (result.loc[result['year'].isin([2015, 2016]), 'production'].mean())

Todos los valores:

#if want mean of all years of filtered df
print (result.groupby('year')['production'].mean())


#if want mean of all years of original df
print (df.groupby('year')['production'].mean())

Editar:

Filtrar por boolean indexing con between y luego obtenga {{ X2}}:

print (df)
   production  day  year
0         5.0   50  2010
1        80.0   51  2011
2       190.0   52  2012
3        10.0   52  2013
4         2.0   52  2014
5         2.0   51  2015
6        40.0   52  2016
7        20.0   53  2017

#get minimal year
min_year = df['year'].min()
s = df.loc[df['year'].between(min_year, min_year + 5) & (df['day'] == 52), 'production'] 

print (s)
2    190.0
3     10.0
4      2.0
Name: production, dtype: float64

a = s.mean()
print (a)
67.33333333333333
1
jezrael 22 feb. 2018 a las 11:41

Puede usar groupby y mean (supongo que quiere decir mean of the column production )

result[['day','production']].groupby('day').mean()

O

result[['year','production']].groupby('year').mean()

También puede usar el mismo enfoque para todo el marco de datos y verá promedios para todos los días / año:

myFile[['day','production']].groupby('day').mean()

O

myFile[['year','production']].groupby('year').mean()
0
honzajolic 22 feb. 2018 a las 10:26

describe da la media, la mediana, etc. para todas las columnas.

result.describe()

Si desea la media de cada año, use groupby

result.groupby('year').mean()
2
Thirupathi Thangavel 22 feb. 2018 a las 10:16