代码之家  ›  专栏  ›  技术社区  ›  ozo

熊猫-通过迭代过滤器计算平均值

  •  1
  • ozo  · 技术社区  · 7 年前

    我有一个具有以下结构的数据帧

    Goals   Team       Day
    1     Madrid     monday  
    3     Madrid     friday
    3     Man U      monday
    2     Man u      sunday
    etc    etc       etc
    

    所以我有一个包含数百个团队、一周中的几天和目标的数据框架。

    我要做的是创建一个数据框架,其中包含团队和日期之间每个可能组合的平均值,例如:

    Team     Day     Average
    Madrid   monday    5.6
    Madrid   tuesday   6.7
    Madrid   tuesday   4.3
    Madrid   wednesday 3.5
    Madrid   thursday  4.3
    Madrid   friday    3.9
    Madrid   saturday  9.8
    Madrid   sunday    3.4
    Man U    monday    4.5
    Man U    tuesday   4.2
    ...       ...      ...
    etc       etc      etc
    

    我怎么能用熊猫和麻木来做这个?

    我想我必须使用循环,但我不知道怎么做。

    1 回复  |  直到 7 年前
        1
  •  2
  •   piRSquared    7 年前

    安装程序

    np.random.seed([3, 1415])
    
    teams = ['Madrid', 'Man U']
    days = 'mon tue wed thu fri sat sun'.split()
    df = pd.DataFrame(dict(
        Team=np.random.choice(teams, 15),
        Day=np.random.choice(days, 15),
        Goals=np.random.randint(10, size=15)
    ))
    

    groupby

    df.groupby(
        ['Team', 'Day'], 
        as_index=False
    ).mean().rename(columns=dict(Goals='Average'))
    
         Team  Day  Average
    0  Madrid  fri     8.00
    1  Madrid  mon     3.75
    2   Man U  mon     7.00
    3   Man U  sat     5.00
    4   Man U  sun     5.00
    5   Man U  thu     7.00
    6   Man U  tue     8.00
    7   Man U  wed     4.00
    

    解释

    1. 我希望 子句 不言自明
    2. as_index=False 讲述 子句 不要将分组列放入结果的索引中。这使我不必 reset_index
    3. mean() 取平均值
    4. rename(columns=dict(Goals='Average')) 只是内务处理以获得所需的列名称。我把字典传给了 columns 论证 rename 方法。

    对评论的回应

    熊猫如何知道用哪一列来计算平均值?例如,如果我有两列有数值,我只想取其中一列的平均值,就会发生这种情况。我该怎么告诉熊猫?

    您可以通过在 子句

    df.groupby(
        ['Team', 'Day'], 
        as_index=False
    ).Goals.mean().rename(columns=dict(Goals='Average'))
    

    否则,熊猫将尝试平均所有未分组的列。