使用 Pandas Group By 和 .sum() 获得 % Rate

Col*_*in9 5 python dataframe pandas pandas-groupby

我想根据.groupby()in获得一些百分比率pandas。我的目标是取一个指标列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
Run Code Online (Sandbox Code Playgroud)

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

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

预期结果:

   Year XRate YRate  ZRate
0  2011  0.20  0.29   0.33 
1  2012  0.47  0.63   0.25
Run Code Online (Sandbox Code Playgroud)

Shu*_*rma 5

您可以使用 sumgroup对数据框进行Year聚合和聚合:

s1 = df.groupby('Year').sum()
s2 = df.query("Ind == 'A'").groupby('Year').sum()

s2.div(s1).round(2).add_suffix('Rate')
Run Code Online (Sandbox Code Playgroud)
      XRate  YRate  ZRate
Year                     
2011   0.20   0.29   0.33
2012   0.47   0.62   0.25
Run Code Online (Sandbox Code Playgroud)