下面是輸入資料
Name A B C D E F G Total
Ray 1 2 2 0 0 0 0 5
Tom 0 0 0 2 1 0 0 3
Sam 0 0 0 0 0 3 1 4
以下是預期的輸出
Name A B C D E F G Total A:B:C D:E F:G
Ray 1 2 2 0 0 0 0 5 20:40:40 0:0 0:0
Tom 0 0 0 2 1 0 0 3 0:0:0 67:33 0:0
Sam 0 0 0 0 0 3 1 4 0:0:0 0:0 75:25
uj5u.com熱心網友回復:
想法是在串列中創建列組,cols然后在回圈中將所選列除以sum,替換NaNs,舍入并轉換為整數,最后加入字串:
#check columns names
print (df.columns.tolist())
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'Total']
cols = [('A','B','C'), ('D','E'), ('F','G')]
for c in cols:
#for test
print (c)
print(df.loc[:, c])
df[f'{":".join(c)}'] = (df.loc[:, c]
.div(df.loc[:, c].sum(axis=1), axis=0)
.fillna(0)
.mul(100)
.round()
.astype(int)
.astype(str)
.agg(':'.join, axis=1))
print (df)
A B C D E F G Total A:B:C D:E F:G
0 1 2 2 0 0 0 0 5 20:40:40 0:0 0:0
1 0 0 0 2 1 0 0 3 0:0:0 67:33 0:0
2 0 0 0 0 0 3 1 4 0:0:0 0:0 75:25
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397682.html
