2017-05-16 23 views
3

我有一個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

一些想法使它與pythonpandas,numpy)或psql

回答

8

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

我永遠不會有,雖然這裏使用降。這是一個優雅的解決方案。 – tnknepp

+0

@tnknepp - 謝謝。 – jezrael