使用Pandas计算所有行的和,但排除其中一行。

15

我在PostgreSQL数据库中有多个表格,看起来大致如下:

gid      col2       col1        col3
6        15         45          77
1        15         45          57
2        14         0.2         42
3        12         6           37
4        9          85          27
5        5          1           15
对于每个表格,数字和列名会改变(我是在Python循环中创建它们的)。
我想要在每个表格后面再添加另一列,称之为“sum”,它将计算除gid以外的每一列的总和。目标是拥有像这样的东西:
我希望在每个表格中添加一个名为“sum”的附加列,该列将包含除gid列以外每一列的总和。目标是获得类似以下结果:
gid     col2       col1        col3     sum 
6        15         45          77      137
1        15         45          57      117
2        14         0.2         42      56.2
3        12         6           37      55
4        9          85          27      121 
5        5          1           15      21

我无法使用列名:唯一没有更改的列名是gid

有什么办法可以用python (pandas, numpy) 或者 psql 实现吗?

1个回答

49

使用 drop + sum:

df['sum'] = df.drop('gid', axis=1).sum(axis=1)
print (df)
   gid  col2  col1  col3    sum
0    6    15  45.0    77  137.0
1    1    15  45.0    57  117.0
2    2    14   0.2    42   56.2
3    3    12   6.0    37   55.0
4    4     9  85.0    27  121.0
5    5     5   1.0    15   21.0
如果 gid 总是第一列,则可以通过使用 iloc 选择除第一列外的所有列,然后对它们进行 sum 操作。
df['sum'] = df.iloc[:, 1:].sum(axis=1)
print (df)
   gid  col2  col1  col3    sum
0    6    15  45.0    77  137.0
1    1    15  45.0    57  117.0
2    2    14   0.2    42   56.2
3    3    12   6.0    37   55.0
4    4     9  85.0    27  121.0
5    5     5   1.0    15   21.0

1
我从来没有想过在这里使用 drop。那是一个如此优雅的解决方案。 - tnknepp
@tnknepp - 谢谢。 - jezrael
如果按列求和并将其附加到轴0上,但长度不匹配,因为gid被排除在外,这是否可能? - Aeria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接