[英]Calculating the percentage of values based on the values in other columns
我正在嘗試創建一個列,其中包含基於 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
我相信這將解決您的查詢
y=0
data['Percentage']='None'
for teacher in teachers:
x=data[data['Teachers']==teacher]
total=sum(x['Counts'])
condition1= 1 in set(x['Grades'])
condition2= 2 in set(x['Grades'])
if (condition1==True or condition2==True):
for i in range(y,y+len(x)):
data['Percentage'].iloc[i]=(data['Counts'].iloc[i]/total)*100
else:
for i in range(y,y+len(x)):
data['Percentage'].iloc[i]=0
y=y+len(x)
Output:
Teachers Grades Counts Percentage
0 Teacher1 1 1 25
1 Teacher1 2 2 50
2 Teacher1 3 1 25
3 Teacher2 2 1 100
4 Teacher3 3 2 0
5 Teacher4 2 2 50
6 Teacher4 3 2 50
我已經利用 boolean 理解來根據每個老師分離數據。 大多數代碼是不言自明的。 如需任何其他說明,請隨意填寫以發表評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.