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)
您可以使用 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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |