【问题标题】:Getting % Rate using Pandas Group By and .sum()使用 Pandas Group By 和 .sum() 获得百分比率
【发布时间】:2021-01-08 15:56:43
【问题描述】:

我想根据pandas 中的.groupby() 获得一些百分比率。我的目标是取一个指标列Ind 并得到A(分子)的比率除以当年的总数(A+B)

示例数据:

import pandas as pd
import numpy as np
df: pd.DataFrame = pd.DataFrame([['2011','A',1,2,3], ['2011','B',4,5,6],['2012','A',15,20,4],['2012','B',17,12,12]], columns=["Year","Ind","X", "Y", "Z"])
print(df)
   Year Ind   X   Y   Z
0  2011   A   1   2   3
1  2011   B   4   5   6
2  2012   A  15  20   4
3  2012   B  17  12  12

2011 年的示例:XRate 将总结 X 的 A 指标(即 1)并除以总数 (A+B) 即 5,因此我将收到 0.20 的 Xrate。

我想对所有 X、Y、Z 列执行此操作以获取费率。我试过做 lambda apply 但不能完全得到想要的结果。

期望的结果:

   Year XRate YRate  ZRate
0  2011  0.20  0.29   0.33 
1  2012  0.47  0.63   0.25

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    您可以group Year 上的数据框并使用 sum 聚合:

    s1 = df.groupby('Year').sum()
    s2 = df.query("Ind == 'A'").groupby('Year').sum()
    
    s2.div(s1).round(2).add_suffix('Rate')
    

          XRate  YRate  ZRate
    Year                     
    2011   0.20   0.29   0.33
    2012   0.47   0.62   0.25
    

    【讨论】:

    • 非常好。使用查询比df[df.Ind.eq('A')] 有优势吗?
    • 谢谢@zabop 我觉得这里没有优势,你可以改用df[df.Ind.eq('A')]
    猜你喜欢
    • 2016-07-02
    • 2020-07-25
    • 2013-05-31
    • 2011-09-06
    • 2018-04-05
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多