【问题标题】:All row sum with pandas except one大熊猫的所有行总和,除了一个
【发布时间】:2017-10-15 15:33:20
【问题描述】:

我在 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 之外的每个 calumn 的总和。目标是有这样的东西:

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 来实现它的一些想法?

【问题讨论】:

    标签: python postgresql pandas numpy


    【解决方案1】:

    使用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
    

    【讨论】:

    • 我从来没想过在这里使用 drop。这是一个优雅的解决方案。
    • @tnknepp - 谢谢。
    • 如果总和是每列并且将附加在轴 0 上怎么办?但长度将不匹配,因为 gid 被排除在外。有可能吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2020-10-12
    • 2023-03-22
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多