[英]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.