1

我想用他们的手段替换体育场出勤率的空值(法语富裕)。因此,我这样做是为了按季节/团队计算平均值:

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'})

结果如上。所以我想也许索引赛季/球队,但如何?之后我如何访问它?

谢谢

4

2 回答 2

0

在 groupby 操作之后,您在 - 操作中引用的列groupby成为索引。df.index您可以通过(或test.index在您的情况下)访问索引。

在您的情况下,您创建了一个多索引。有关如何使用 MultiIndex 处理数据帧的详细说明,请参阅pandas 文档

但是,您可以使用以下方法再次重新创建标准数据框:

df = pd.DataFrame({
    'season': test.index.season,
    'domicile': test.index.domicile, 
    'affluence': test.affluence}
)
于 2019-03-12T08:13:07.993 回答
0

test = data.groupby(['season','domicile'], as_index=False).agg({'affluence':'mean'})应该做你想做的事。

as_index=False当您不想处理 MultiIndexes 时,该参数特别有用。

例子:

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
于 2019-03-12T08:18:47.343 回答