Не имея ваших данных, я сделал два примера DataFrames
Прежде всего вам необходимо импортировать данные из Excel в pandas
с помощью:
df1 = pd.read_excel('name_file.xlsx', sheet_name='year2018')
И делайте это каждый год.
После этого вы можете использовать мой пример, чтобы получить ожидаемый результат:
# Example dataframe 1
print(df1)
Month Date Year Time mb dir
0 1 1 2018 AM 100 265
1 1 1 2018 AM 150 265
2 1 1 2018 AM 200 270
3 1 1 2018 AM 250 270
4 1 1 2018 PM 100 265
5 1 1 2018 PM 150 265
6 1 1 2018 PM 200 265
7 1 1 2018 PM 250 265
#Example dataframe2
print(df2)
Month Date Year Time mb dir
0 1 1 2019 AM 100 275
1 1 1 2019 AM 150 275
2 1 1 2019 AM 200 280
3 1 1 2019 AM 250 280
4 1 1 2019 PM 100 275
5 1 1 2019 PM 150 275
6 1 1 2019 PM 200 275
7 1 1 2019 PM 250 280
Мы можем использовать pandas.concat
, чтобы добавить вместе кадры данных (в вашем случае их может быть больше двух).
df_all = pd.concat([df1, df2], ignore_index=True)
print(df_all)
Month Date Year Time mb dir
0 1 1 2018 AM 100 265
1 1 1 2018 AM 150 265
2 1 1 2018 AM 200 270
3 1 1 2018 AM 250 270
4 1 1 2018 PM 100 265
5 1 1 2018 PM 150 265
6 1 1 2018 PM 200 265
7 1 1 2018 PM 250 265
8 1 1 2019 AM 100 275
9 1 1 2019 AM 150 275
10 1 1 2019 AM 200 280
11 1 1 2019 AM 250 280
12 1 1 2019 PM 100 275
13 1 1 2019 PM 150 275
14 1 1 2019 PM 200 275
15 1 1 2019 PM 250 280
Теперь мы можем использовать pandas.Groupby.Series.mean
, чтобы получить ожидаемый результат:
print(df_all.groupby(['Month', 'Date', 'Time', 'mb']).dir.mean().reset_index())
Month Date Time mb dir
0 1 1 AM 100 270.0
1 1 1 AM 150 270.0
2 1 1 AM 200 275.0
3 1 1 AM 250 275.0
4 1 1 PM 100 270.0
5 1 1 PM 150 270.0
6 1 1 PM 200 270.0
7 1 1 PM 250 272.5