pandas 数据框的某些列的矢量化总和

Vectorise sum across certain columns of a pandas data frame

我想通过矢量化优化 pandas 数据帧的某些列的总和。 详细地说,我有以下数据框:

df = pd.DataFrame(index = [1, 3, 2], data = {'Low':[1, 1, 1], 'Mid':[2, 2, 6], 'High':[3, 3, 3]})

并且我创建了一个新列,其中包含前 N 列的总和,其中 N 是索引值:

df['new_col'] = [df.iloc[i,:df.index[i]].sum() for i in range(df.shape[0])]

最终数据框如下所示:

    Low  Mid  High  new_col
 1    1    2     3        1
 3    1    2     3        6
 2    1    6     3        7

显然这必须被矢量化。我真的很感激任何能让我避免 for 循环的提示。 谢谢!

尝试广播索引并与列号进行比较:

df['new_col'] = df.where(df.index.values[:,None] > np.arange(df.shape[1]), 0).sum(1)

输出:

   Low  Mid  High  new_col
1    1    2     3        1
3    1    2     3        6
2    1    6     3        7