Исходные данные представлены в виде плоской таблицы:
import pandas as pdurl ='https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/football.csv'df = pd.read_csv(url)df.head()
Unnamed: 0
Name
Age
Nationality
Club
Value
Wage
Position
Crossing
Finishing
...
Penalties
Composure
Marking
StandingTackle
SlidingTackle
GKDiving
GKHandling
GKKicking
GKPositioning
GKReflexes
0
0
L. Messi
31
Argentina
FC Barcelona
110500000
565000
RF
84
95
...
75
96
33
28
26
6
11
15
14
8
1
1
Cristiano Ronaldo
33
Portugal
Juventus
77000000
405000
ST
84
94
...
85
95
28
31
23
7
11
15
14
11
2
2
Neymar Jr
26
Brazil
Paris Saint-Germain
118500000
290000
LW
79
87
...
81
94
27
24
33
9
9
15
15
11
3
3
De Gea
27
Spain
Manchester United
72000000
260000
GK
17
13
...
40
68
15
21
13
90
85
87
88
94
4
4
K. De Bruyne
27
Belgium
Manchester City
102000000
355000
RCM
93
82
...
79
88
68
58
51
15
13
5
10
13
5 rows × 42 columns
Функция pivot_table позволяет быстро и просто составлять сводные таблицы:
df['Club']
0 FC Barcelona
1 Juventus
2 Paris Saint-Germain
3 Manchester United
4 Manchester City
...
12892 Crewe Alexandra
12893 Trelleborgs FF
12894 Cambridge United
12895 Tranmere Rovers
12896 Tranmere Rovers
Name: Club, Length: 12897, dtype: object
C:\Users\dfedorov\AppData\Local\Temp\ipykernel_3852\736501139.py:2: FutureWarning: The provided callable <built-in function sum> is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
pivot_table(values='Wage',
C:\Users\dfedorov\AppData\Local\Temp\ipykernel_3852\1600286794.py:2: FutureWarning: The provided callable <built-in function sum> is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
pivot_table(values='Wage',
C:\Users\dfedorov\AppData\Local\Temp\ipykernel_3852\1600286794.py:2: FutureWarning: The provided callable <built-in function sum> is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
pivot_table(values='Wage',
C:\Users\dfedorov\AppData\Local\Temp\ipykernel_3852\1600286794.py:2: FutureWarning: The provided callable <built-in function sum> is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
pivot_table(values='Wage',
Club
FC Barcelona
Juventus
Manchester United
Real Madrid
All
Nationality
Argentina
565000.0
205000.0
206000.0
NaN
976000
Belgium
110000.0
NaN
230000.0
240000.0
580000
Bosnia Herzegovina
NaN
180000.0
NaN
NaN
180000
Brazil
465000.0
335000.0
91000.0
570000.0
1461000
Chile
205000.0
NaN
215000.0
NaN
420000
Costa Rica
NaN
NaN
NaN
195000.0
195000
Croatia
260000.0
160000.0
NaN
420000.0
840000
Dominican Republic
NaN
NaN
NaN
140000.0
140000
Ecuador
NaN
NaN
120000.0
NaN
120000
England
NaN
NaN
478000.0
NaN
478000
France
495000.0
145000.0
375000.0
459000.0
1474000
Germany
240000.0
160000.0
NaN
355000.0
755000
Italy
NaN
460000.0
88000.0
NaN
548000
Ivory Coast
NaN
NaN
105000.0
NaN
105000
Morocco
NaN
160000.0
NaN
NaN
160000
Netherlands
135000.0
NaN
NaN
NaN
135000
Poland
NaN
125000.0
NaN
NaN
125000
Portugal
125000.0
405000.0
NaN
NaN
530000
Scotland
NaN
NaN
11000.0
NaN
11000
Serbia
NaN
NaN
165000.0
NaN
165000
Spain
912000.0
NaN
260000.0
1404000.0
2576000
Uruguay
455000.0
NaN
NaN
NaN
455000
Wales
NaN
NaN
13000.0
355000.0
368000
All
3967000.0
2335000.0
2357000.0
4138000.0
12797000
Пример решения
Сводная таблица, показывающая максимальные зарплаты игроков на разных позициях, играющих за разные клубы, была создана с помощью кода:
С помощью какого кода можно получить из этой таблицы информацию о максимальной зарплате вратаря (GK), играющего за футбольный клуб "Manchester City"?
Обратите внимание, что в датафрейме получилось много NaN (Not a Number). Это означает, что на пересечении строки и столбца нет данных, например, в клубе Juventus нет футболистов из Бельгии:
pivot.loc['Belgium']
Club
FC Barcelona 110000.0
Juventus NaN
Manchester United 230000.0
Real Madrid 240000.0
All 580000.0
Name: Belgium, dtype: float64
Для того, чтобы заменить NaN на 0, можно применить дополнительный параметр fill_value. Этот параметр принимает значение, которым нужно заполнить все NaN в получившейся сводной таблице:
Создайте сводную таблицу, содержащую сведения о количестве игроков, занимающих разные позиции в каждом клубе. Отсутствующие значения замените нулями.
Каково среднее количество вратарей (GK) в клубе? Ответ округлите до трёх цифр после запятой.
Задание 2
Используя таблицу, созданную на предыдущем шаге, определите, сколько клубов не содержат данных о центральных полузащитниках (CM).
Подсказка: для выполнения этого задания желательно сохранить сводную таблицу в виде отдельного датафрейма и сгруппировать часть данных этого датафрейма с помощью value_counts().
Задание 3
С помощью сводной таблицы и функции loc посчитайте, сколько получают ("Wage") русские футболисты ("Russia"), играющие за ФК "AS Monaco".