-1

我有一个列表,如下所示:

[['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']]

我需要sumifs在python中制作一个等效的函数(因为文件对于excel来说太大了)以根据第5列中的标识符对第3列的内容求和(输出可以是某些版本的L1MCc_dup1is 3、MER63Bis 4和MLT2B4_dup1is 3 )。

有什么建议/帮助来实现这个功能吗?

4

2 回答 2

1

使用字典:

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

在此循环之后,d会将最后一列中的键值映射到所需的总和。

您也可以使用collections.defaultdict而不是普通字典。

于 2012-06-14T14:56:23.667 回答
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'. 当然,您可以将其更改为任何其他条件。

于 2012-06-14T14:58:54.340 回答