Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算嵌套列表中元素的出现次数,并执行计算_Python_Python 3.x_Relational Database_Rdbms_Nested Lists - Fatal编程技术网

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

Python 计算嵌套列表中元素的出现次数,并执行计算,python,python-3.x,relational-database,rdbms,nested-lists,Python,Python 3.x,Relational Database,Rdbms,Nested Lists,这个标题有点误导人,因为我真的不知道如何描述这个 假设我有一个嵌套列表,如下所示: 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']] 在该嵌套列表中,有4个列表的年份为2014年,2个列表的年份为2013年 我想得到每年的平均值。所以2014年,我想 (1234 + 4123 + 5754 + 8548) / 4

这个标题有点误导人,因为我真的不知道如何描述这个

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

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']]
在该嵌套列表中,有4个列表的年份为2014年,2个列表的年份为2013年

我想得到每年的平均值。所以2014年,我想

(1234 + 4123 + 5754 + 8548) / 4 
2013年

(9469 + 3564) / 2
我需要得到每年发生的事件,因为我需要平均出每年的总数。 最后,我想要的是

new = [[4914.75, '2014'],[6516.5, '2013']]
请注意,日期不是“2014年3月1日”,而是“2014年3月1日”


如何做到这一点?

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

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,并且第二个列表是日期):


@StefanPochmann是的,我希望看到一个“Python”代码it@StefanPochmann嗯,我不知道怎么写,这就是为什么我在这里要求使用返回日期的键函数排序;使用itertools.griubby对项目进行分组;对组中的值求和;除以组长度。
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)