2016-03-11 2 views
0

У меня есть лист со значениями, как показано ниже:Создание нескольких средних столбцов в CSV

AirTemperature AirHumidity SoilTemperature SoilMoisture LightIntensity WindSpeed Year Month Day Hour Minute Second TimeStamp MonthCategorical TimeOfDay 
18 84 17 41 40 4 2016 1 1 6 1 1 10106 January Day 
20 88 22 92 31 0 2016 1 1 7 1 1 10107 January Day 
23 1 22 59 3 0 2016 1 1 8 1 1 10108 January Day 
23 3 22 72 41 4 2016 1 1 9 1 1 10109 January Day 
24 63 23 83 85 0 2016 1 1 10 1 1 10110 January Day 
29 73 27 50 1 4 2016 1 1 11 1 1 10111 January Day 
28 37 30 46 29 3 2016 1 1 12 1 1 10112 January Day 

, который выглядит, как показано ниже:

enter image description here

Я хотел бы вычислить среднее состояние для каждого день (т. е. имеют среднюю температуру на день 1,2,3,4 и среднюю влажность воздуха на день 1,2,3,4). Я хотел бы создать новый csv с этими значениями. Таким образом, на выходе есть год, месяц, день, meanAirTemp, MeanAirHumidity и т. Д. Для всех условий.

Я использую следующий код, чтобы получить только одно условие:

NightTimeTemperatures = pd.read_csv('MonthlyDataSplit/Night/MeanNightlyConditions.csv') 
MeanMonthlyNightlyTemperatures = NightTimeTemperatures.groupby('Month')['AirTemperature'].mean().reset_index(name='MeanAirTemperature') 
MeanMonthlyNightlyTemperatures.to_csv(r'MonthlyDataSplit/Day/SummaryMeanNightlyTemps.csv') 

Но я хотел бы расширить его, чтобы сделать то же самое для всех условий. Что-то вроде следующего:

DayTimeTemperatures = pd.read_csv('MonthlyDataSplit/Day/MeanDailyConditions.csv') 
MeanMonthlyDailyTemperatures = DayTimeTemperatures.groupby('Month')['AirTemperature','AirHumidity', 'SoilTemperature', 'SoilMoisture', 'LightIntensity', 'WindSpeed'].mean().reset_index(name='meanAirTemperature', 'meanAirHumidity', 'meanSoilTemperature', 'meanSoilMoisture','meanLightIntensity','meanWindSpeed') 
MeanMonthlyDailyTemperatures.to_csv(r'MonthlyDataSplit/Day/SummaryMeanDailyConditions.csv') 

ответ

1

Если вы хотите использовать различные агрегатные функции, которые вы можете использовать grp.agg() функцию, указав различные агрегатные функции для различных колонки:

print(df.groupby(['Year','Month','Day']).agg(
    {'AirTemperature': 'mean', 
    'AirHumidity': 'mean', 
    'SoilTemperature': 'max' 
    }).reset_index()) 

Выход:

Year Month Day AirTemperature SoilTemperature AirHumidity 
0 2016  1 1  23.571429    30 49.857143 
1

IIUC вы можете использовать mean с фильтрующими колонок subset:

print NightTimeTemperatures.groupby('Month')[['AirTemperature','AirHumidity', 'SoilTemperature', 'SoilMoisture', 'LightIntensity', 'WindSpeed']].mean().reset_index() 
    Month AirTemperature AirHumidity SoilTemperature SoilMoisture \ 
0  1  23.571429 49.857143  23.285714  63.285714 

    LightIntensity WindSpeed 
0  32.857143 2.142857 
Смежные вопросы