3 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
您也可以嘗試以下答案。它不使用numpy,而是基于在sets中查找唯一元素的使用groupby。
table = [[15, 29, 6, 2],
[16, 9, 8, 0],
[7, 27, 16, 0]]
def averages(table, col, by):
columns = tuple(([table[i][col] for i in range(len(table))])) #Place col column into tuple so it can be placed into dictionary
groupby = tuple(([table[i][by] for i in range(len(table))])) #Place groupby column into tuple so it can be placed into dictionary
'''groupby_unq: tuple data type
stores list of unique entries in groupby.'''
groupby_unq = tuple(set(groupby))
'''avg: numpy.ndarray data type
numpy array of zeros of same length as groupby_unq.'''
avg = np.zeros( len(groupby_unq) )
for i in range(len(groupby)):
for j in range(len(groupby_unq)):
if(groupby[i]==groupby_unq[j]): avg[j]+=columns[i]
avgdict = dict( (groupby_unq[i], avg[i]) for i in range(len(avg)) )
return avgdict
result = averages(table, 1, 3)
print result
{0: 36.0, 2: 29.0}

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
我花了一分鐘才弄清楚你想要完成什么,因?yàn)槟愕暮瘮?shù)和變量名稱引用了平均值,但你的輸出是一個(gè)總和。
根據(jù)您的輸出,您似乎正在嘗試按另一列中的組聚合給定列中的行值。
這是推薦的解決方案(可能可以通過列表理解將其簡化為單行)。這將循環(huán)遍歷group by 中的唯一(使用set)值 ( b),agg_dict[b]通過正在處理為該組創(chuàng)建字典鍵 ( ),如果正在處理 group by,則對(duì)給定列 (col) 中的所有行求和 (table[i][by] == by。
table = [[15, 29, 6, 2],
[16, 9, 8, 0],
[7, 27, 16, 0]]
def aggregate(tbl, col, by):
agg_dict = {}
for b in list(set([table[i][by] for i in range(len(table))]))
agg_dict[b] = sum([table[i][col] for i in range(len(table)) if table[i][by] == b])
print(agg_dict)
aggregate(table, 1, 3)
添加回答
舉報(bào)