我有一个简单的练习,但是在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
答案 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