首页 > 解决方案 > 根据其他列中的值计算值的百分比

问题描述

我正在尝试创建一个列,其中包含基于 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 级。所以这些百分比应该添加到数据集中的新列中。老实说,我什至想不出任何可以尝试的东西,当我在这里搜索时,我也没有找到任何关于它的信息。你能帮我拿到专栏吗?

标签: python

解决方案


我不确定这是最有效的方法,但我发现它非常易读且易于理解。

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

推荐阅读