相当于Excel Sumproduct的熊猫

时间:2019-10-17 15:00:49

标签: python pandas sumproduct

我有一个简单的练习,但是在Pandas中找不到简单的解决方案。我的数据框具有以下格式:

         A      B      C      D              A1          B1          C1            D1
0       0.0    0.0    0.0  0.090909       0.247747    0.162398    0.381459       0.208396
1       0.0    0.0    0.0  0.090909       0.250811    0.168629    0.374599       0.205961
2       0.0    0.0    0.0  0.090909       0.252173    0.168521    0.374551       0.204755

我想始终使用A A1 + B B1 .. .D * D1

计算列的总和

我找到了一个解决方案,但列数将增加,这有点混乱并且不适合。任何解决该问题的pythonic方法?使用Excel,我会使用sumproduct函数。

当前解决方案:

df['SP'] = df[["A", 'A1']].prod(axis=1) + df[["B", 'B1']].prod(axis=1) + df[["C", 'C1']].prod(axis=1) + df[["D", 'D1']].prod(axis=1) 

应导致:

 df[SP]
0.018945
0.018724
0.018614

2 个答案:

答案 0 :(得分:2)

类似于Chris的评论,但您可以忽略列名并通过范围来代替:

num_base_cols=4
num_repeat = 2

col_groups = np.tile(np.arange(num_base_cols), num_repeat)

df.groupby(col_groups, axis=1).prod().sum(1)

输出:

0    0.018945
1    0.018724
2    0.018614
dtype: float64

答案 1 :(得分:0)

您可以识别“左”和“右”的列,然后乘以sum(axis=1)

请注意,我假设您的所有列均遵循col_name / col_name<number>约定(如果不是这种情况,则必须手动标识列表{{1 }}和cols_left

cols_right