Python中的sumifs函数

2024-10-01 13:29:31 发布

您现在位置: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列中的标识符对第3列的内容求和(输出可以是L1MCc_dup1是3,MER63B是4,MLT2B4_dup1是3)。在

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


Tags: 文件函数功能内容列表标识符excel建议
2条回答
>>> 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'。当然,你可以把它改成其他条件。在

使用字典:

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

在这个循环之后,d将把最后一列中的键值映射到所需的和。在

您还可以使用collections.defaultdict代替普通字典。在

相关问题 更多 >