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
我想通过矢量化优化 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