簡體   English   中英

根據python中列中的值創建百分比列

[英]Creating a percentage column based on the values in a column in python

我正在嘗試創建一個列,其中包含基於 python 中其他列中的值的百分比。 例如,假設我們有以下數據集。

+------------------------------------+------------+
|              teachers              |  grades    |
+------------------------------------+------------+
| Teacher1                           |     1      |
| Teacher1                           |     2      |
| Teacher1                           |     0      |
| Teacher2                           |     1      |
| Teacher2                           |     2      |
| Teacher2                           |     0      |
| Teacher2                           |     2      |
| Teacher3                           |     2      |
| Teacher3                           |     0      |
| Teacher3                           |     1      |
| Teacher3                           |     0      |
| Teacher4                           |     0      |
| Teacher4                           |     0      |
+------------------------------------+------------+

如您所見,我們在第一列中有老師。 在第二列中,我們可以看到老師給學生的成績(0,1 和 2)。 在這里,我試圖獲得每個老師的 1 年級和 2 年級在給定年級總數中的百分比。 例如,老師 1 給了一個 1 年級,一個 2 年級和一個 0 年級。在這種情況下,給定的 1 和 2 年級在總成績中的百分比為 66%。 所以我想得到以下數據框:

+------------------------------------+------------+------------+
|              teachers              |  grades    | percentage |
+------------------------------------+------------+------------+
| Teacher1                           |     1      |     66%    |
| Teacher1                           |     2      |     66%    |
| Teacher1                           |     0      |     66%    |
| Teacher2                           |     1      |     75%    |
| Teacher2                           |     2      |     75%    |
| Teacher2                           |     0      |     75%    |
| Teacher2                           |     2      |     75%    |
| Teacher3                           |     2      |     50%    |
| Teacher3                           |     0      |     50%    |
| Teacher3                           |     1      |     50%    |
| Teacher3                           |     0      |     50%    |
| Teacher4                           |     0      |     0%     |
| Teacher4                           |     0      |     0%     |
+------------------------------------+------------+------------+

到目前為止,我已經嘗試了以下方法,但沒有奏效。 請你幫助我好嗎?

percents = {} #store Teacher:percent
for t, g in df.groupby('teachers'):
    total = g.grades.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]

使用 numpy/pandas 時請避免循環。 這是它的矢量化版本:

percentage = df.groupby('teachers').grades.transform(lambda x: sum(x > 0) / len(x))

這里唯一的區別是.transform ,它需要一個函數來處理組 - 你已經准備好了其他一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM