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

我试图完成的是为组/描述中的每个人获得一定的百分比。所以首先,我遍历数据并添加到一个数组中。然后我用它来创建一个默认字典。

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。我的下一步是在该组中选择一个人,然后将他们的人数除以他们组的总数。以上面那个组中的 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 回答