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)