python Pandas中groupby的百分比

gc0ot86w  于 2023-01-12  发布在  Python
关注(0)|答案(2)|浏览(120)

我有一个 Dataframe ,其中包含列“team”、“home_or_away”和“result”,用于存储结果(“W”:赢或“L”:在主场(“H”)或客场(“A”)的体育赛事中,“X”、“Y”、“Z”队:

df = pd.DataFrame({'team': ['X', 'X', 'X', 'X', 'Y', 'Y', 'Z', 'Z', 'Z', 'Z'],'home_or_away':['H', 'A', 'A', 'A', 'H', 'H', 'H', 'A', 'H', 'H'],'result':['W', 'W', 'W', 'L', 'W', 'L', 'W', 'L', 'L', 'L']})

我想生成每个团队、每个活动地点的赢/输百分比(“A”或“H”)
我已经生成了一个 Dataframe ,其中包含每个团队和活动地点的赢/输总数,groupby代码如下:

groupedDf =df.groupby(['team', 'home_or_away','result'])[['result']].count()
print(groupedDf)

输出如下:

result
team home_or_away result        
X    A            L            1
                  W            2
     H            W            1
Y    H            L            1
                  W            1
Z    A            L            1
     H            L            2
                  W            1

但是,我希望有一个额外的列与百分比,如下所示:

result Perc
team home_or_away result        
X    A            L            1 33.33
                  W            2 66.66
     H            W            1 100
Y    H            L            1 50
                  W            1 50
Z    A            L            1 100
     H            L            2 66.66
                  W            1 33.33

我怎么能这样对待Pandas呢?谢谢

ijxebb2r

ijxebb2r1#

省略按result分组,而使用value_counts

out = df.groupby(['team', 'home_or_away']).value_counts(normalize=True)

输出:

team  home_or_away  result
X     A             W         0.666667
                    L         0.333333
      H             W         1.000000
Y     H             L         0.500000
                    W         0.500000
Z     A             L         1.000000
      H             L         0.666667
                    W         0.333333

可选地乘以100。

bzzcjhmw

bzzcjhmw2#

您可以使用groupby.transform('sum')获取每个团队/位置的总数:

groupedDf =df.groupby(['team', 'home_or_away','result'])[['result']].count()

total = (groupedDf.groupby(level=['team', 'home_or_away'])
         ['result'].transform('sum')
         )

groupedDf['Perc'] = groupedDf['result'] / total * 100

输出:

result        Perc
team home_or_away result                    
X    A            L            1   33.333333
                  W            2   66.666667
     H            W            1  100.000000
Y    H            L            1   50.000000
                  W            1   50.000000
Z    A            L            1  100.000000
     H            L            2   66.666667
                  W            1   33.333333

相关问题