繁体   English   中英

计算嵌套列表中元素的出现,并执行计算

[英]count the occurrences of elements in a nested list, and perform calculations

标题有点误导,因为我真的不知道该如何形容

假设我有一个嵌套列表,如下所示:

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']]

在此嵌套列表中,2014年有4个列表,2013年有2个列表。

我想获得每年的平均值。 所以我想在2014年

(1234 + 4123 + 5754 + 8548) / 4 

在2013年,

(9469 + 3564) / 2

我需要获取每年的发生次数,因为我需要平均每年的总数。 最后,我想要类似的东西,

new = [[4914.75, '2014'],[6516.5, '2013']]

请注意,日期不在“ 01/03/2014”中,而仅在“ 1/3/2014”中

如何才能做到这一点?

您可以使用熊猫来做到这一点。

import pandas as pd

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']]

df = pd.DataFrame(a)

df[1] = pd.to_datetime(df[1])

df = df.set_index(1)

df.groupby(df.index.year.astype(str)).mean()\
  .reset_index().values.tolist()

输出:

[['2013', 6516.5], ['2014', 4914.75]]

上面的答案有效,如果您不习惯使用大熊猫,可以参考此书。

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']]

data = {}
result = []
for item in a:
    year = item[1].split('/')[-1]
    data[year] = data.get(year, []) + [item[0]]

for key in data.keys():
    items = data.get(key)
    avg = sum(items)/len(items)
    result.extend([key, avg])

print(result)

尝试以下操作(假设内部列表的长度始终为2,而第二个列表是日期):

from collections import defaultdict

cumulatives = defaultdict(int)
counts = defaultdict(int)
for (amount, dt) in a:
    key = dt[-4:]
    cumulatives[key] += amount
    counts[key] += 1.0

output = [[cumulatives[key]/counts[key], key] for key in cumulatives.keys()]
print(output)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM