Агрегирование и суммирование данных в кадре данных панд.Есть ли способ лучше? - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть данные статистики лакросса с игроками, позициями, забитыми мячами и т. Д. (Хранятся в переменной с именем da)

        Session Title   PLAYER STARTER  Number  G  A  SH  SOG  GB  DC  T/O  CT Pos
0          Opponent 1  Player1   False       1  0  0   0    0   0   0    0   0  M  
1          Opponent 2  Player1   False       1  0  0   0    0   1   0    0   0  M
2          Opponent 3  Player1   False       1  0  0   0    0   0   1    0   0  M
3          Opponent 4  Player1   False       1  0  0   0    0   0   0    0   0  M
4          Opponent 5  Player1   False       1  0  0   0    0   1   0    0   0  M

Я хотел посмотреть, какие позиции наберут больше всего очков, голов иголевых передач (количество очков - просто количество голов + количество голевых передач)

Я придумал следующее:

poses = da.groupby(['Pos'])[['G','A']].sum()
poses = poses.drop(['GK'], axis = 0)
pose = poses.reset_index()
pose['Pts'] = pose['G']+pose['A']

opose = pd.melt(pose, id_vars='Pos', value_vars=['G', 'A'],
                var_name='G/A', value_name='Count')
#display(opose)

dims = (15, 11)
fig, ax = plt.subplots(figsize=dims)

plt.subplot(121)
sns.barplot(x=opose['Pos'], y=opose['Count'], hue=opose['G/A'])

plt.subplot(122)
sns.barplot(x=pose['Pos'], y=pose['Pts']);

Поэтому я сгруппировал исходный фрейм данных da по позиции и получил суммы голови помогает, затем бросил вратарей и сделал колонку очков.После использования melt у меня было два работоспособных фрейма данных, и каждый из них был нанесен с использованием seaborn.

Мой главный вопрос: есть ли лучший способ сделать это?Я чувствую, что нужно просто найти общие цели и т. Д. Должен ли я использовать функцию группировки?Могу ли я получить эти визуализации более непосредственно из исходного кадра данных?enter image description here

1 Ответ

0 голосов
/ 05 января 2019

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

df_no_GK = df[df['Pos'] != 'GK']
group = df_no_GK.groupby(['Pos'])['G', 'A'].sum()

fig, ax = plt.subplots(1, 2)
group.plot(kind='bar', ax=ax[0])
group.sum().plot(kind='bar', ax=ax[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...