3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
下面應(yīng)該讓你開始(原諒懶惰的變量命名)。主要思想是利用groupbyitertools 中的現(xiàn)有字段按您想要的任何字段進(jìn)行聚合,然后通過將結(jié)果收集到字典中,從這些分組中提取您想要平均的相關(guān)字段。
PS - 希望這不是你的作業(yè),因?yàn)槟侵皇菓卸?)
stuff = """country continent year lifeExp pop gdpPercap
Zambia Africa 2002 39.193 10595811 1071.613938
Zambia Africa 2007 42.384 11746035 1271.211593
Zimbabwe Africa 1952 48.451 3080907 406.8841148
Zimbabwe Africa 1957 50.469 3646340 518.7642681
Zimbabwe Africa 1962 52.358 4277736 527.2721818
Zimbabwe Africa 1967 53.995 4995432 569.7950712
Zimbabwe Africa 1972 55.635 5861135 799.3621758
Zimbabwe Africa 1977 57.674 6642107 685.5876821
Zimbabwe Africa 1982 60.363 7636524 788.8550411
Zimbabwe Africa 1987 62.351 9216418 706.1573059
Zimbabwe Africa 1992 60.377 10704340 693.4207856
Zimbabwe Africa 1997 46.809 11404948 792.4499603
Zimbabwe Africa 2002 39.989 11926563 672.0386227
Zimbabwe Africa 2007 43.487 12311143 469.7092981
Argentina Americas 1952 62.485 17876956 5911.315053
Argentina Americas 1957 64.399 19610538 6856.856212
Argentina Americas 1962 65.142 21283783 7133.166023
Argentina Americas 1967 65.634 22934225 8052.953021
Argentina Americas 1972 67.065 24779799 9443.038526
Argentina Americas 1977 68.481 26983828 10079.02674""".strip().splitlines()
import itertools
from collections import defaultdict
stuff = [line.split() for line in stuff]
headers, *records = stuff
labeled_records = [dict(zip(headers,line)) for line in records]
#group by continent
grouped = itertools.groupby(labeled_records,lambda x: x['continent'])
results = defaultdict(list)
# for other categories, just change 'lifeExp' to the column you want
for k,v in grouped:
for d in v:
results[k].append(float(d['lifeExp']))
# average collected results
for k,v in results.items():
print(k,'\t',sum(v)/len(v))

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
對(duì)于 groupby,您可以只使用一個(gè)字典,您可以使用該字典以編程方式填充鍵,并且值以 null 開頭并以 3 元組列表結(jié)尾;它包含列名、計(jì)算類型以及您應(yīng)該為給定組合返回的值。
可能有更漂亮和更優(yōu)雅的方式,但這應(yīng)該有效。
編輯:等一下,它們將是 2 元組,因?yàn)槟呀?jīng)指定了列(我的意思是大陸)名稱。我想我還在半夢(mèng)半醒。
您也可以制作一個(gè)包含所有相關(guān)值的 n 維列表(矩陣)。這將是明智的做法。

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
我不想破壞計(jì)算解決方案的樂趣,但您可以將其轉(zhuǎn)換為字典列表,這將使數(shù)據(jù)更易于管理。為此,您需要拆分所有子列表,我們從第 1 行用自己的列表壓縮每個(gè)子列表,這些將是我們的鍵,然后我們可以用鍵壓縮這些子列表。之后,我們使用dict()構(gòu)造函數(shù)來創(chuàng)建我們的字典列表。
有了這個(gè),你可以做諸如此類的事情for i in res: print(i['country'],從列表中提取只屬于某個(gè)國(guó)家的字典等等。
import csv
import pprint
with open('gapminder.tsv', 'r') as gap:
csv_reader = csv.reader(gap, delimiter="\t")
lst = list(csv_reader)
lst = [i[0].split() for i in lst]
prep = zip([lst[0]]*len(lst[1:]), lst[1:])
prep = [(zip(i[0], i[1])) for i in prep]
res = [dict([j for j in i]) for i in prep]
pprint.pprint(res)
[{'continent': 'Africa',
'country': 'Zambia',
'gdpPercap': '1071.613938',
'lifeExp': '39.193',
'pop': '10595811',
'year': '2002'},
{'continent': 'Africa',
'country': 'Zambia',
'gdpPercap': '1271.211593',
'lifeExp': '42.384',
'pop': '11746035',
'year': '2007'},
...
添加回答
舉報(bào)