-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列5の識別子に基づいて列3の内容を合計するためにPythonの関数と同等のものを作成する必要があります(ファイルが大きすぎてExcelにはなりません)(出力はL1MCc_dup13、4、3のバージョンである可能性があります) )。MER63BMLT2B4_dup1

この機能を実現するためのアドバイス/ヘルプはありますか?

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 に答える