Python: Использование панд для переформатирования списка списков
Приведен список списков, которые я извлекаю из API. Мне удалось переформатировать эти данные с помощью панд. Однако я пытаюсь получить средние значения этих данных, а затем распечатывать их построчно, а не бок о бок.
{
"resource": "playergamelog",
"parameters": {
"PlayerID": 201939,
"LeagueID": "00",
"Season": "2014-15",
"SeasonType": "Regular Season"
},
"resultSets": [
{
"name": "PlayerGameLog",
"headers": [
"SEASON_ID",
"Player_ID",
"Game_ID",
"GAME_DATE",
"MATCHUP",
"WL",
"MIN",
"FGM",
"FGA",
"FG_PCT",
"FG3M",
"FG3A",
"FG3_PCT",
"FTM",
"FTA",
"FT_PCT",
"OREB",
"DREB",
"REB",
"AST",
"STL",
"BLK",
"TOV",
"PF",
"PTS",
"PLUS_MINUS",
"VIDEO_AVAILABLE"
],
"rowSet": [
[
"22014",
201939,
"0021401229",
"APR 15, 2015",
"GSW vs. DEN",
"W",
19,
4,
10,
0.4,
2,
4,
0.5,
0,
0,
0,
2,
2,
4,
7,
5,
0,
2,
1,
10,
14,
1
],
[
"22014",
201939,
"0021401212",
"APR 13, 2015",
"GSW vs. MEM",
"W",
29,
6,
10,
0.6,
3,
6,
0.5,
0,
0,
0,
0,
4,
4,
8,
1,
0,
3,
2,
15,
24,
1
],
[
"22014",
201939,
"0021401192",
"APR 11, 2015",
"GSW vs. MIN",
"W",
35,
11,
21,
0.524,
5,
11,
0.455,
7,
8,
0.875,
0,
4,
4,
7,
4,
0,
3,
1,
34,
17,
1
],
[
"22014",
201939,
"0021401174",
"APR 09, 2015",
"GSW vs. POR",
"W",
35,
17,
23,
0.739,
8,
13,
0.615,
3,
3,
1,
1,
1,
2,
10,
0,
0,
4,
2,
45,
21,
1
],
[
"22014",
201939,
"0021401156",
"APR 07, 2015",
"GSW @ NOP",
"L",
35,
9,
18,
0.5,
5,
8,
0.625,
2,
2,
1,
1,
5,
6,
9,
1,
0,
2,
3,
25,
4,
1
],
[
"22014",
201939,
"0021401150",
"APR 05, 2015",
"GSW @ SAS",
"L",
30,
9,
17,
0.529,
5,
10,
0.5,
1,
2,
0.5,
0,
4,
4,
6,
1,
0,
4,
2,
24,
-16,
1
],
[
"22014",
201939,
"0021401142",
"APR 04, 2015",
"GSW @ DAL",
"W",
27,
4,
12,
0.333,
1,
4,
0.25,
2,
3,
0.667,
2,
2,
4,
3,
1,
0,
1,
1,
11,
9,
1
],
[
"22014",
201939,
"0021401126",
"APR 02, 2015",
"GSW vs. PHX",
"W",
34,
10,
22,
0.455,
6,
11,
0.545,
2,
2,
1,
1,
7,
8,
5,
0,
0,
6,
3,
28,
-1,
1
]
]
}
]
}
Мой код распечатывается следующим образом:
FG3A 3.83
FG3_PCT 0.34
FTM 5.50
FTA 7.17
FT_PCT 0.78
OREB 0.75
Когда я получу вышеуказанный ответ от API. Я назначаю
data= response_shots.json()['resultSets'][0]['rowSet'] #stats is a list
# Then I assign/store the headers obtained from this API:
headers_traditional = data['resultSets'][0]['headers']
# Then I take list of lists from data and reformat it using the following:
traditional_stats = pd.DataFrame(data, columns=headers_traditional)
# If I want to print the traditional stats with mean I use:
print(traditional_stats.mean())
Но всякий раз, когда это делается, или у меня есть более одного игрока, которого я оцениваю, он выводит результаты следующих игроков ниже. Я предпочел бы, чтобы они печатали рядом или все средние значения по одному игроку на одной строке, а затем переходили к следующему игроку (при этом все еще используя те же заголовки)
1 ответ
Ой, подождите, я только что прочитал ваш комментарий. Это должно быть легко сделать то, что вы хотите:
Случай, когда все игроки находятся в одном DataFrame
averages = df.groupby('Player_ID').mean().unstack()
Случай, когда каждый игрок находится в отдельном DataFrame
Здесь я предполагаю, что вы получаете каждого игрока один за другим, перебирая каждый Player_ID.
averages = pd.DataFrame()
for player in all_player_ids:
# p_data = get data for Player_ID == player from API
# df = whatever you do to clean p_data
averages = averages.append(df.groupby('Player_ID').mean().unstack())
Я предполагаю, что вы используете только данные из p_data['resultSets']
, Попробуйте и дайте мне знать.