Я использую панды для анализа файла CSV. Файл CSV содержит значение для каждого дня за последние 10 лет.

CSV выглядит так:

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
.
.

Я использую следующий код:

def calcAverageFirstYears(productionCSV):

    myFile = pd.read_csv(productionCSV)

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

Итак, я получаю этот результат:

   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

Как я могу рассчитать среднее значение этих значений? Как я могу рассчитать среднее значение за 2015 и 2016 годы?

Спасибо за вашу помощь

0
relash 22 Фев 2018 в 13:12

3 ответа

Лучший ответ

Использование:

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

А также:

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

Все значения:

#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())

РЕДАКТИРОВАТЬ:

Фильтруйте по boolean indexing с помощью between, а затем получите {{ 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 Фев 2018 в 11:41

Вы можете использовать groupby и mean (я предполагаю, что вы хотите получить среднее значение для столбца production )

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

Или

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

Вы также можете использовать тот же подход для всего фрейма данных, и вы увидите средние значения для всех дней / лет:

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

Или

myFile[['year','production']].groupby('year').mean()
0
honzajolic 22 Фев 2018 в 10:26

describe дает среднее значение, медиану и т. Д. Для всех столбцов.

result.describe()

Если вы хотите среднее значение для каждого года, используйте groupby

result.groupby('year').mean()
2
Thirupathi Thangavel 22 Фев 2018 в 10:16