如何计算python中元组列表的平均值?

2024-10-01 13:41:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,格式如下:

[(证券、支付的价格、购买的股份数)…]

[('MSFT', '$39.458', '1,000'), ('AAPL', '$638.416', '200'), ('FOSL', '$52.033', '1,000'), ('OCZ', '$5.26', '34,480'), ('OCZ', '$5.1571', '5,300')]

我想合并数据。使每个证券只列出一次。在

[(证券名称、支付的平均价格、持有的股份数),…]


Tags: 数据名称列表格式价格证券元组aapl
3条回答
>>> lis
[('MSFT', '$39.458', '1,000'), ('AAPL', '$638.416', '200'), ('FOSL', '$52.033', '1,000'), ('OCZ', '$5.26', '34,480'), ('OCZ', '$5.1571', '5,300')]
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i in lis:
...    amt = float(i[1].strip('$'))
...    num = int(i[2].replace(",", ""))
...    d[i[0]].append((amt,num))
... 
>>> for i in d.iteritems():
...   average_price = sum([s[0] for s in i[1]])/len([s[0] for s in i[1]])
...   total_shares = sum([s[1] for s in i[1]])
...   print (i[0],average_price,total_shares)
... 
('AAPL', 638.416, 200)
('OCZ', 5.20855, 39780)
('FOSL', 52.033, 1000)
('MSFT', 39.458, 1000)

我使用dictionary作为输出。在

lis=[('MSFT', '$39.458', '1,000'), ('AAPL', '$638.416', '200'), ('FOSL', '$52.033', '1,000'), ('OCZ', '$5.26', '34,480'), ('OCZ', '$5.1571', '5,300')]

dic={}
for x in lis:
    if x[0] not in dic:
     price=float(x[1].strip('$'))
     nos=int("".join(x[2].split(',')))
     #print(nos)
     dic[x[0]]=[price,nos]
    else:
     price=float(x[1].strip('$'))
     nos=int("".join(x[2].split(',')))
     dic[x[0]][1]+=nos
     dic[x[0]][0]=(dic[x[0]][0]+price)/2
print(dic)    

输出:

^{pr2}$

你想做什么还不太清楚。一些示例代码会有所帮助,并提供一些您尝试过的信息。即使你的方法是完全错误的,它也会让我们对你的目标有一个模糊的概念。在

同时,也许numpy的numpy.mean函数适合您的问题?我建议将元组列表转换为numpy数组,然后将mean函数应用于所述数组的一个片段。在

也就是说,它在任何类似于列表的数据结构上都可以工作,并且您可以指定要执行平均值的访问。在

http://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html

编辑:

根据我收集到的数据,元组列表按以下方式组织数据:

(name, dollar ammount, weight)

首先,我将使用numpy将元组列表转换为数组。从那里,找到第一列中的唯一值(名称):

^{pr2}$

现在计算每个标签的平均值

meandic = {}
for element in unique_tags:
   tags = np.nonzero(a[0,:] == element)  # identify which lines are tagged with element
   meandic[element] = np.mean([t(1) * t(2) for t in a[tags]])

请注意,此代码未经测试。我可能把小细节弄错了。如果你想不出什么办法,请留下评论,我很乐意纠正我的错误。您必须删除“$”并在必要时将字符串转换为浮点数。在

相关问题 更多 >