我正在尝试使用pandas矩阵乘法。我有四个步骤
有没有办法更好地写这个,也许是在一行代码中?目前它很慢并且CPU很重。
代码段如下:
df_baseScenario[end_columns+ "fwd_rate"] = df_baseScenario[start_columns].divide(df_baseScenario[end_columns].values,axis=0)
df_baseScenario[end_columns+ "fwd_rate"] = df_baseScenario[end_columns+ "fwd_rate"].subtract(1)
df_baseScenario[end_columns+ "fwd_rate"] = df_baseScenario[end_columns+ "fwd_rate"].multiply(1/df_baseScenario['Calc_Period'].values,axis=0)
df_baseScenario[end_columns+ "fwd_rate"] = df_baseScenario[end_columns+ "fwd_rate"].add(df_baseScenario['Rate Index Spread'].values,axis=0)
答案 0 :(得分:1)
为了使其更短,更易读,您可以按如下方式使用链接:
df = df_baseScenario
df["fwd_rate"] = df[start_cols] \
.divide(df[end_cols].values, axis=0) \
.subtract(1) \
.multiply(1/df['Calc_Period'], axis=0) \
.add(df['Rate Index Spread'], axis=0)
答案 1 :(得分:0)
我按照有问题的文字创建代码,不是通过示例代码创建代码:
df_baseScenario = pd.DataFrame({'Calc_Period':[1,2,3],
'Rate Index Spread':[4,5,6],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3],
'G':[4,2,9],
'H':[5,7,8],
'I':[8,5,4]})
print (df_baseScenario)
start_columns = ['D','E','F']
end_columns = ['G','H','I']
df = df_baseScenario[start_columns].mul(df_baseScenario[end_columns].values) \
.sub(1) \
.div(df_baseScenario['Calc_Period'], axis=0) \
.add(df_baseScenario['Rate Index Spread'], axis=0)
#assign calumne names by end_columns
df.columns = end_columns
#add prefix
df = df.add_suffix('fwd_rate')
print (df)
Gfwd_rate Hfwd_rate Ifwd_rate
0 7.000000 28.000000 59.000000
1 7.500000 15.000000 14.500000
2 20.666667 21.666667 9.666667
#concat columns to original
print (pd.concat([df_baseScenario, df], axis=1))
Calc_Period D E F G H I Rate Index Spread Gfwd_rate Hfwd_rate \
0 1 1 5 7 4 5 8 4 7.000000 28.000000
1 2 3 3 4 2 7 5 5 7.500000 15.000000
2 3 5 6 3 9 8 4 6 20.666667 21.666667
Ifwd_rate
0 59.000000
1 14.500000
2 9.666667