2012-06-14 58 views
-1

功能我有一個列表的列表,看起來像:SUMIFS在python

[['chr1', '3088', '1', 744, 'L1MCc_dup1'] 
['chr1', '3089', '1', 744, 'L1MCc_dup1'] 
['chr1', '3090', '1', 744, 'L1MCc_dup1'] 
['chr1', '15037', '1', 96, 'MER63B'] 
['chr1', '15038', '1', 96, 'MER63B'] 
['chr1', '15039', '1', 96, 'MER63B'] 
['chr1', '15040', '1', 96, 'MER63B'] 
['chr1', '19465', '1', 418, 'MLT2B4_dup1'] 
['chr1', '19466', '1', 418, 'MLT2B4_dup1'] 
['chr1', '19467', '1', 418, 'MLT2B4_dup1']] 

我需要在Python sumifs功能相當於(因爲文件太大Excel文件)總結的內容基於列5中的標識符(輸出可以是L1MCc_dup1的一些版本是3,MER63B是4並且MLT2B4_dup1是3)。

任何建議/幫助,使這個功能?

+2

http://www.whathaveyoutried.com - SO不是讓別人爲你寫代碼的地方。你有什麼嘗試,爲什麼它不工作? –

回答

1

使用字典:

d = {} 
for row in my_list: 
    key = row[4] 
    value = int(row[2]) 
    d[key] = d.get(key, 0) + value 

這個循環之後,d將在最後一列的關鍵值映射到所需款項。

你也可以使用collections.defaultdict而不是一個正常的字典。

0
>>> d =[['chr1', '3088', '1', 744, 'L1MCc_dup1'], 
['chr1', '3089', '1', 744, 'L1MCc_dup1'], 
['chr1', '3090', '1', 744, 'L1MCc_dup1'], 
['chr1', '15037', '1', 96, 'MER63B'], 
['chr1', '15038', '1', 96, 'MER63B'], 
['chr1', '15039', '1', 96, 'MER63B'], 
['chr1', '15040', '1', 96, 'MER63B'], 
['chr1', '19465', '1', 418, 'MLT2B4_dup1'], 
['chr1', '19466', '1', 418, 'MLT2B4_dup1'], 
['chr1', '19467', '1', 418, 'MLT2B4_dup1']] 
>>> sum(map(lambda x: x[3], filter(lambda x: x[4] == 'MLT2B4_dup1', d))) 
1254 

所有4個值的總和(我假設你的意思是,因爲它是唯一的INT列),其中最後一列等於'MLT2B4_dup1'。當然,您可以將其更改爲任何其他條件。