on中的Python Pandas矩阵乘法运算

2024-05-23 19:13:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用熊猫矩阵乘法。我有四个步骤

  1. 将2500列除以2500列,创建2500个新列
  2. 使用上面的结果,从所有列中减去1
  3. 使用点2的结果,将所有2500列除以1列
  4. 使用第3点的结果,将1列添加到所有2500

有没有一种方法可以更好地编写它,也许只需要一行代码?它目前相当慢,而且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)

Tags: columns方法代码dfrate步骤矩阵cpu
2条回答

为了使其更具可读性,可以采用以下方式:

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)

我是通过有问题的文本创建代码,而不是通过示例代码:

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

^{pr2}$

相关问题 更多 >