-1

次の形式のデータがあります。

key, time_bin, count
abc, 1, 200
abc, 2,230
abc1,1,300
abc1,2,180
abc2,1, 300
abc2,2, 800

したがって、各キーには同じ数の time_bin があります。

以下を見つけたい..それぞれについて、カウントに基づく上位n個のキーであるタイムビン..

上の例で..調べたいとしましょう..各時間ビンの上位 2 つのキーは何ですか? だから..答えは

1=> [{"abc1",300},{"abc2":300}]
2=> ({"abc2":800},{"abc":230}]

これを解決する良い方法は何ですか?

4

1 に答える 1

3

collections.Counterで使用collections.defaultdict:

from collections import Counter, defaultdict
import csv

counts = defaultdict(Counter)

with open(somefilename, 'rb') as f:
    reader = csv.reader(f)
    next(reader)  # skip the header
    for row in reader:
        key, time_bin, count = row[0], int(row[1]), int(row[2])
        counts[time_bin][key] += count

for time_bin in counts:
    print '{}=> {}'.format(time_bin, counts[time_bin].most_common(2))

このCounter.most_common()方法は特にここで役立ちます。指定されたカウント セットの上位カウントを返します。ここでは、時間ビンごとに収集されます。

出力形式は、例とほぼ一致します。

1=> [('abc1', 300), ('abc2', 300)]
2=> [('abc2', 800), ('abc', 230)]

.most_common()辞書ではなく、タプルのリストを返すためです。

于 2013-04-11T21:21:51.007 に答える