2016-03-03 39 views
0

Excel Image 1蟒蛇/ EXCEL:我如何在列所有相同的值加列B的數值的

Excel Image 2

請看「Excel的圖片1」開始。

我使用python拉出前兩列,並將它們存儲在它們自己的單獨數組中。我想要做的就是添加列B的值,如果列中的值相同。例如:如果列A中的值爲「0」,則加上-200和400並得到200,因爲「0」在A列的第1行和第2列中。

添加後如「Excel圖像2「,將兩個Column的新值存儲在各自獨立的數組中,這樣我就可以將它們用於以後的計算。

import xlrd 
excel = '/Users/Bob/Desktop/' 

wb1 = xlrd.open_workbook(excel + 'assignment.xlsx') 
sh1 = wb1.sheet_by_index(0) 

colA,colB = [],[] 
for a in range(0,sh1.nrows): 
    colA.append(int(sh1.cell(a,0).value)) 
    colB.append(int(sh1.cell(a,1).value)) 
print(colA) 
print(colB) 

for i in colA: 
    if i == 0: 
     add = colB[0] + colB[1] 
print(add) 

我想,增加了B列中的這些值不管有多少數量或價值相同數量的A列

電流輸出都給出了代碼:

[0, 0, 1, 2, 2, 2, 3, 3, 4, 4] 
[-200, 400, 30, 600, -70, 10, 20, -90, 40, 40] 

預期輸出:

[0, 1, 2, 3, 4] 
[200, 30, 540, 70, 80] 

謝謝!

回答

0

我想使用row_values方法。這稱爲行號和列號(從零開始)。例如,要獲取列表中的第一行,請執行以下操作:

first_row = sh1.row_values(0) 
[0.0, -200.0] 

切片列表以獲取特定列中的值。如:

sh1.row_values(0)[1] 
-200.0 

我開始保持在第一列(curr_key)的軌道值和運行累積和對於給定的關鍵— cum_sum。當密鑰更改時,我只是更新附加cum_sumsum_list和更新curr_keycum_sum。最後要做的是追加累計和中的最後一個值。

curr_key = sh1.row_values(0)[0] 
cum_sum = sh1.row_values(0)[1] 
sum_list = [] 
for a in range(1,sh1.nrows): 
    if sh1.row_values(a)[0] == curr_key: 
     cum_sum += sh1.row_values(a)[1] 
     curr_key = sh1.row_values(a)[0] 
    else: 
     sum_list.append(cum_sum) 
     curr_key = sh1.row_values(a)[0] 
     cum_sum = sh1.row_values(a)[1] 
sum_list.append(cum_sum) 

這將產生在sum_list如下:

[200.0, 30.0, 540.0, -70.0, 80.0] 

順便說一句,你的第二個文件中有70.0代替-70.0行3

經過一番思考,我意識到一個更好的方法是使用字典(類似於@奧斯汀黑斯廷斯的答案,但沒有groupby)。

key_vals = [x for x in sh1.col_values(0)] 
int_vals = [y for y in sh1.col_values(1)] 
sum_list = {} 
for i,value in enumerate(key_vals): 
    if str(value) not in sum_list: 
     sum_list[str(value)] = int_vals[i] 
    else: 
     sum_list[str(value)] += int_vals[i] 
for key in sorted(sum_list): 
    print('{}, {}'.format(key, sum_list[key])) 

這產生了:

0.0, 200.0 
1.0, 30.0 
2.0, 540.0 
3.0, -70.0 
4.0, 80.0 
+0

怎麼樣[0,1,2,3,4]我怎樣才能打印? – Bob

+0

您可以通過在更改'if'的else部分中的鍵之前附加該值來跟蹤另一個列表中的'curr_key'值。 –

+0

請問您可以將它添加到代碼中。我很困惑。 – Bob

1

使用itertools.groupby()

from itertools import groupby 
import xlrd 
excel = '/Users/Bob/Desktop/' 

wb1 = xlrd.open_workbook(excel + 'assignment.xlsx') 
sh1 = wb1.sheet_by_index(0) 

sheet_rows = [sh1.row(r) for r in range(0, sh1.nrows)] 
groups = groupby(sheet_rows, lambda row: row[1]) 

key_list = [] 
sum_list = [] 
for key, group in groups: 
    key_list.append(key) 
    sum_list.append(sum(group)) 

print(key_list) 
print(sum_list) 
+0

可以請你幫我解決以下問題:http://stackoverflow.com/questions/35763589/python-excel-compare-the-given-value-with-the-summed-value – Bob

相關問題