iT邦幫忙

2

python 新手問題

最近在自學PYthon,遇到一個練習是利用pandas建立一個表格
卡在最後要建立一個columns放每個row的加權後的分數
我目前做到下圖這樣
https://ithelp.ithome.com.tw/upload/images/20190916/20121113ZxMOdZOgmw.png

最後想把分數 [86.5, 79.4, 88.2, 96.5, 86.3, 76.8, 96.1, 78.5, 82.4, 88.6]
透過各科加權放在最後一個column,如下圖
https://ithelp.ithome.com.tw/upload/images/20190916/201211130nB7Yx8aV2.png

有想法是想用迴圈達成,但還是不知道怎麼開頭
希望有人能給點提示~
謝謝QQ

3
dragonH
iT邦大師 3 級 ‧ 2019-09-16 20:56:53
最佳解答

https://ithelp.ithome.com.tw/upload/images/20190916/20117259tA8PRQHrXP.png

請貼 code

不要貼圖

打得好累 /images/emoticon/emoticon11.gif


img

圖片有夠糊/images/emoticon/emoticon16.gif

import pandas as pd
subject = ['國文', '英文', '數甲', '數乙', '物理', '化學', '生物', '歷史', '地理', '公民'
]
major = ['土木系', '財政系']

wg = [
  [2, 2, 0, 1, 0, 0, 0, 1, 1, 0],
  [1, 1.5, 0, 1.5, 0, 0, 0, 0, 0, 0],
]
score = [86.5, 79.4, 88.2, 96.5, 86.3, 76.8, 96.1, 78.5, 82.4, 88.6]
df2 = pd.DataFrame(wg, index = major, columns = subject)
df2['加權分數'] = df2.dot(score)
df2

2
Austin
iT邦新手 5 級 ‧ 2019-09-16 21:54:30

python能不要用迴圈就盡量不要用
你會被慢到懷疑人生

0
froce
iT邦大師 5 級 ‧ 2019-09-16 22:03:38

用迴圈你乾脆不要用pandas...

import pandas as pd

score = pd.Series([86.5, 79.4, 88.2, 96.5, 86.3, 76.8, 96.1, 78.5, 82.4, 88.6])

weight = pd.DataFrame(data=[
    [2,2,0,1,0,0,0,1,1,0],
    [1,1.5,0,1.5,0,0,0,0,0,0]
])

weight['加權分數'] = weight.dot(score)
print(weight)

多筆分數:

import pandas as pd

scores = pd.DataFrame([
    [86.5, 79.4, 88.2, 96.5, 86.3, 76.8, 96.1, 78.5, 82.4, 88.6],
    [87, 79, 90, 93.5, 96.3, 86.8, 95.1, 78.6, 86.4, 78.6]
])


weight = pd.DataFrame(data=[
    [2,2,0,1,0,0,0,1,1,0],
    [1,1.5,0,1.5,0,0,0,0,0,0]
])

# 矩鎮內積,所以有一方要轉置
print(weight.dot(scores.T))

我要發表回答

立即登入回答