.apply如何在DataFrame.groupby上工作?

2024-09-28 01:23:25 发布

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

              Count
League  Result         
EPL     H      16
        D      9
        A      10
Champ   H      67
        D      15
        A      57
        H      87
La Liga D      35
        A      40
        

我有一份不同联赛的足球比赛结果明细表,并统计了该结果出现的次数

我想看看主场胜利、平局和客场胜利在总比赛中所占的比例。我在下面看到了一个解决方案:

df.groupby("League").apply(lambda g: (g/g.sum()*100)

乍一看,这是有道理的,但是g到底是什么呢?我假设它是H,D或A计数,然后g.sum()将所有的H,D,A计数按每个除法分组求和。但是,如果g只是一个值,我们如何调用方法g.sum()?这里到底是什么


Tags: countresult次数la计数sumleagueepl
2条回答

g是一个数据帧。因为您在'League'上分组,所以您将把数据帧分割成单独的块,其中包含'League'的唯一值。为了说明这一点,我们可以迭代GroupBy对象

for idx, g in df.groupby('League'):  # `idx` is the unique group key
    print(g, '\n')

               Count
League Result       
Champ  H          67
       D          15
       A          57
       H          87

               Count
League Result       
EPL    H          16
       D           9
       A          10

                Count
League  Result       
La Liga D          35
        A          40

然后apply将函数分别应用于这些数据帧中的每一个。调用g.sum()将为您提供一个对组中的每列求和的序列

for idx, g in df.groupby('League'):
    print(g.sum(), '\n')

Count    226
dtype: int64 

Count    35
dtype: int64 

Count    75
dtype: int64 

我们通常做transform

df.Count=df.Count*100/df.groupby(level=0)['Count'].transform('sum')

函数中的g是数据帧

df.groupby(level=0).apply(lambda  x : type(x))
Out[607]: 
League
Champ      <class 'pandas.core.frame.DataFrame'>
EPL        <class 'pandas.core.frame.DataFrame'>
La Liga    <class 'pandas.core.frame.DataFrame'>
dtype: object

相关问题 更多 >

    热门问题