我甚至不确定我的措辞是否正确,但我很难绕过这个问题。我有一组数据,描述,个人和数字。有些人可能在不同的群体中。有些可以有相同的描述。示例可能如下所示:
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。我的下一步是在该组中选择一个人,并将他们的人数除以他们的总人数。使用PERSON C作为上述组中的一个例子,那么我会得到0.36 / 3.71 = 0.097。我不知道如何把它放到我的代码中,但它似乎应该不难 - 但我只是没有看到它。在此之后我还有其他几个步骤,但我想一旦我知道如何获得这个特定的百分比,我就可以解决其余问题。
答案 0 :(得分: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)
答案 1 :(得分: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)