pandas 数据帧之间的矩阵乘法

Matrix multiplication between pandas dataframe

我正在尝试查找数据框和列向量(另一个数据框)之间的点积。 数据框如下所示:

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 做错了什么?提前致谢。

你可以这样做:

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