我試圖在資料框和列向量(另一個資料框)之間找到點積。資料框如下所示:
df = pd.DataFrame([
[0,23,0, 0, 1,0],
[1,33,1, 0, 0,0],
[2,40,1, 0, 1,1]],
columns=['SN','Age', 'Nice_540', 'Nice_200', 'Nice_153','Nice_124'])
SN |Age |Nice_540 |Nice_200| Nice_153|Nice_124|
----|-----|--------|--------|----------|--------|
0 | 23 | 0 | 0 | 1 | 0 |
1 | 33 | 1 | 0 | 0 | 0 |
2 | 40 | 1 | 0 | 1 | 1 |
我希望行矩陣乘以最后四個列標題(540;200 等)的數字,以便在矩陣乘法后最后一列“FINAL”看起來像這樣:
SN | Age |Nice_540 |Nice_200| Nice_153|Nice_124|FINAL |
----|-----|--------|--------|----------|--------|--------|
0 | 23 | 0 | 0 | 1 | 0 | 153 |
1 | 33 | 1 | 0 | 0 | 0 | 540 |
2 | 40 | 1 | 0 | 1 | 1 | 817 |
我在最后一列中得到了前兩個數字(153 和 540);但對于最后一個,我得到的是 540153124 而不是 817,正如點積所期望的那樣。
這是我到目前為止所做的:
AAAA = df.columns.to_list()
AAAA = str(AAAA)
string_pattern = r"\d{3}"
regex_pattern = re.compile(string_pattern)
BBBB = regex_pattern.findall(AAAA)
cols=df.filter(regex='Nice_',axis=1).columns
seR = pd.DataFrame(BBBB,index=cols)
df["FINAL"] = df[cols].dot(seR)
得到 540153124 而不是 817 我做錯了什么?提前致謝。
uj5u.com熱心網友回復:
你可以這樣做:
d = df.filter(like='Nice_')
vals = d.columns.str.split('_').str[-1].astype(int)
df['FINAL'] = d.dot(vals)
輸出:
SN Age Nice_540 Nice_200 Nice_153 Nice_124 FINAL
0 0 23 0 0 1 0 153
1 1 33 1 0 0 0 540
2 2 40 1 0 1 1 817
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435585.html
