python访问groupby后面的列

2024-09-26 22:50:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这段代码可以工作并提供我想要的(数据是dataframe):

        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
 ....

所以现在我想对赛季和球队做一个调整。例如测试[测试季节== 1999]. 然而,这不起作用,因为我只有一个专栏'富裕'。它给了我一个错误:

'DataFrame' object has no attribute 'season'

我试过:

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

结果如上所述。所以我想把这个赛季和球队联系起来,但是怎么联系呢?在那之后我该怎么访问它?你知道吗

谢谢


Tags: testdataasdemeanaggseasonfc
2条回答

groupby操作之后,groupby-操作中引用的列将成为索引。您可以通过df.index(在您的例子中是test.index)访问索引。你知道吗

在本例中,您创建了一个多索引。有关如何使用多索引处理数据帧的详细说明,请参见pandas documentation。你知道吗

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

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

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

相关问题 更多 >

    热门问题