python - 根据其他列中的值计算值的百分比
问题描述
我正在尝试创建一个列,其中包含基于 python 中其他列中的值的百分比值。例如,假设我们有以下数据集。
+------------------------------------+------------+--------+
| Teacher | grades | counts |
+------------------------------------+------------+--------+
| Teacher1 | 1 | 1 |
| | 2 | 2 |
| | 3 | 1 |
| Teacher2 | 2 | 1 |
| Teacher3 | 3 | 2 |
| Teacher4 | 2 | 2 |
| | 3 | 2 |
+------------------------------------+------------+--------+
如您所见,第一栏中有教师,第二栏中有教师给出的成绩(1,2 和 3),第三栏中有相应成绩的数量。在这里,我试图获得每个老师给定成绩的总成绩 1 和 2 的百分比。例如,老师 1 给了一个 1 年级、两个 2 年级和一个 3 年级。在这种情况下,给定的年级编号 1 和 2 在总年级中的百分比是 75%。老师 2 只给了 1 个 2 年级,所以百分比是 100%。同样,老师 3 给出了两个 3 级,所以百分比为 0%,因为他/她没有给出任何 1 级和 2 级。所以这些百分比应该添加到数据集中的新列中。老实说,我什至想不出任何可以尝试的东西,当我在这里搜索时,我也没有找到任何关于它的信息。你能帮我拿到专栏吗?
解决方案
我不确定这是最有效的方法,但我发现它非常易读且易于理解。
percents = {} #store Teacher:percent
for t, g in df.groupby('Teacher'): #t,g is short for teacher,group
total = g.counts.sum()
one_two = g.loc[g.grades.isin([1,2])].counts.sum() #consider only 1&2
percent = (one_two/total)*100
#print(t, percent)
percents[t] = [percent]
xf = pd.DataFrame(percents).T.reset_index() #make a df from the dic
xf.columns = ['Teacher','percent'] #rename columns
df = df.merge(xf) #merge with initial df
print(df)
Teacher grades counts percent
0 Teacher1 1 1 75.0
1 Teacher1 2 2 75.0
2 Teacher1 3 1 75.0
3 Teacher2 2 1 100.0
4 Teacher3 3 2 0.0
5 Teacher4 2 2 50.0
6 Teacher4 3 2 50.0
推荐阅读
- r - 无法在 R 中显示饼图聊天
- sql - SQL - 将列值设置为所有引用的总和
- java - TypeError:无法读取未定义的属性“initLazy”?
- html - 当使用引导程序的屏幕较小时,如何使我的固定导航栏不固定?
- flutter - 是否有可能在 mac os 上始终将颤振桌面应用程序放在首位?
- jenkins - Jenkins git checkout 代理不工作
- excel - 如何根据月份显示单元格总数?
- java - 在 Java 中使用哈希映射来查找字符串中字符的频率
- ruby-on-rails - Rails 5 显示当前用户联系人
- angular - 订阅未完成后 NgRx 存储选择