доступ к столбцу после группы - PullRequest
1 голос
/ 12 марта 2019

Я хотел бы заменить нулевую стоимость посещаемости стадиона (достаток на французском языке) их средствами. Поэтому я делаю это, чтобы иметь среднее значение по сезонам / командам:

test = data.groupby(['season','domicile']).agg({'affluence':'mean'})

Этот код работает и дает мне то, что я хочу (данные - это фрейм данных):

        affluence
season  domicile    
1999    AS Monaco   10258.647059
        AS Saint-Etienne    27583.375000
        FC Nantes   28334.705882
        Girondins de Bordeaux   30084.941176
        Montpellier Hérault SC  13869.312500
        Olympique Lyonnais  35453.941176
        Olympique de Marseille  51686.176471
        Paris Saint-Germain     42792.647059
        RC Strasbourg Alsace    19845.058824
        Stade Rennais FC    13196.812500
2000    AS Monaco   8917.937500
        AS Saint-Etienne    26508.750000
        EA Guingamp     13056.058824
        FC Nantes   31913.235294
        Girondins de Bordeaux   29371.588235
        LOSC    16793.411765
        Olympique Lyonnais  34564.529412
        Olympique de Marseille  50755.176471
        Paris Saint-Germain     42716.823529
        RC Strasbourg Alsace    13664.875000
        Stade Rennais FC    19264.062500
        Toulouse FC     19926.294118
 ....

Так что теперь я хотел бы сделать условие для сезона и команды. Например, test [test.season == 1999]. Однако это не работает, потому что у меня есть только один столбец «достаток». Это дает мне ошибку:

'DataFrame' object has no attribute 'season'

Я пытался:

test = data[['season','domicile','affluence']].groupby(['season','domicile']).agg({'affluence':'mean'})

Который приводит, как указано выше. Так что я подумал о том, чтобы проиндексировать сезон / команду, но как? И после этого, как я могу получить к нему доступ?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Выполнение test = data.groupby(['season','domicile'], as_index=False).agg({'affluence':'mean'}) должно помочь вам в том, что вы пытаетесь сделать.

Параметр as_index=False особенно полезен, когда вы не хотите иметь дело с мультииндексами.

Пример:

import pandas as pd

data = {
    'A' : [0, 0, 0, 1, 1, 1, 2, 2, 2],
    'B' : list('abcdefghi')
}

df = pd.DataFrame(data)
print(df)   
#    A  B
# 0  0  a
# 1  0  b
# 2  0  c
# 3  1  d
# 4  1  e
# 5  1  f
# 6  2  g
# 7  2  h
# 8  2  i

grp_1 = df.groupby('A').count()
print(grp_1)
#    B
# A   
# 0  3
# 1  3
# 2  3

grp_2 = df.groupby('A', as_index=False).count()
print(grp_2)
#    A  B
# 0  0  3
# 1  1  3
# 2  2  3
0 голосов
/ 12 марта 2019

После операции groupby столбцы, на которые вы ссылаетесь в операции groupby, становятся индексом.Вы можете получить доступ к индексу по df.index (или test.index в вашем случае).

В вашем случае вы создали мультииндекс.Подробное описание того, как обрабатывать фрейм данных с помощью MultiIndex, можно найти в документации pandas .

. Однако вы можете заново создать стандартный фрейм данных, используя:

df = pd.DataFrame({
    'season': test.index.season,
    'domicile': test.index.domicile, 
    'affluence': test.affluence}
)
...