0

これを正しく表現しているかどうかさえわかりませんが、これについて頭を悩ませています。グループ、説明、個人、および数値のデータセットがあります。一部の個人は、異なるグループに属することができます。いくつかは同じ説明を持つことができます。例は次のようになります。

GROUP A       DESCRIPTION A       PERSON A       NUMBER
GROUP A       DESCRIPTION A       PERSON B       NUMBER
GROUP B       DESCRIPTION A       PERSON C       NUMBER
GROUP C       DESCRIPTION B       PERSON A       NUMBER

私が達成しようとしているのは、グループ/説明内の各人に対して特定の割合を取得することです. まず、データをループして配列に追加します。次に、それを使用して defaultdict を作成します。

for row in data:
    l.append([group, description, person, number])

d = defaultdict(int)
for item in l:
    d[item[0], item[1]] += item[2]

for k,v in d.iteritems():
    print k,v

>>(group, description) (sum of numbers)

ここから私がしなければならないことは、私が混乱するところです。これが私が使用している実際の例です:

GROUP A       DESCRIPTION A       PERSON A       1.14
GROUP A       DESCRIPTION A       PERSON B       1.14
GROUP A       DESCRIPTION A       PERSON C       0.36
GROUP A       DESCRIPTION A       PERSON D       1.07

これらの数値の合計は 3.71 です。私の次のステップは、そのグループの 1 人を取り上げ、その人数をグループの合計で割ることです。上記のグループの例として PERSON C を使用すると、0.36/3.71 = 0.097 になります。これを自分のコードに組み込む方法がわかりませんが、まったく難しいことではないように思えますが、私はそれを見ていません。この後、他にもいくつかのステップがありますが、この特定のパーセンテージを取得する方法がわかれば、残りを理解できると思います。

4

2 に答える 2

1
data = [
['GROUP A'  ,     'DESCRIPTION A'      , 'PERSON A'  ,       1.14],
['GROUP A'  ,     'DESCRIPTION A',       'PERSON B',       1.14],
['GROUP A'  ,     'DESCRIPTION A' ,      'PERSON C',       0.36],
['GROUP A'  ,     'DESCRIPTION A'  ,     'PERSON D',       1.07],
]


total_score = sum([x[3] for x in data])
target_person = 'PERSON C'
the_score = [ x[3]/total_score for x in data if x[2] == target_person]
print(the_score)
于 2013-07-26T18:32:34.457 に答える
0
from collections import namedtuple 
personEntry = namedtuple('entry', ['group', 'description', 'person', 'data')

# allEntries is a list in personEntries
groupSum = lambda groupKey: sum ([i.data for i in allEntries if i.group == groupKey])

groupTotals = {}
for key in ['Group A', 'Group B', 'Group C']:
    groupTotals[key] = groupSum[key]

percentage = lambda entry: entry.data / groupTotals[entry.group]

for eachEntry in allEntries:
    print eachEntry.person, percentage(eachEntry)
于 2013-07-26T19:43:08.283 に答える