Python如何按日期分组字典列表并取每日最高Total_Vaccinations值
解决方法
方案1:使用Python标准库实现(无需安装第三方依赖)
直接用内置的itertools.groupby即可实现分组+取最大值的逻辑,注意分组前需要先按日期排序,避免同日期的分散数据被拆分为多个分组:
from itertools import groupby # 原始字典列表 data = [{'Reportdt': '2021-09-30', 'Total_Vaccinations': 42107850, 'Total_Individuals': None, 'LastValue': 0, 'ObjectId': 13452, 'Elderly': 1655476, 'FirstDose': 23386741, 'SecondDose': 18721109}, {'Reportdt': '2021-09-30', 'Total_Vaccinations': 42107619, 'Total_Individuals': None, 'LastValue': 0, 'ObjectId': 13451, 'Elderly': 1655474, 'FirstDose': 23386687, 'SecondDose': 18720932}, {'Reportdt': '2021-09-30', 'Total_Vaccinations': 42107429, 'Total_Individuals': None, 'LastValue': 0, 'ObjectId': 13450, 'Elderly': 1655473, 'FirstDose': 23386644, 'SecondDose': 18720785}, {'Reportdt': '2021-09-30', 'Total_Vaccinations': 42107125, 'Total_Individuals': None, 'LastValue': 0, 'ObjectId': 13449, 'Elderly': 1655468, 'FirstDose': 23386571, 'SecondDose': 18720554}, {'Reportdt': '2021-09-30', 'Total_Vaccinations': 42106807, 'Total_Individuals': None, 'LastValue': 0, 'ObjectId': 13448, 'Elderly': 1655464, 'FirstDose': 23386503, 'SecondDose': 18720304}] # 先按日期排序,保证同日期数据连续 sorted_data = sorted(data, key=lambda x: x['Reportdt']) daily_max = {} for date, items in groupby(sorted_data, key=lambda x: x['Reportdt']): # 取当前分组下Total_Vaccinations的最大值 daily_max[date] = max(i['Total_Vaccinations'] for i in items) print(daily_max) # 输出结果:{'2021-09-30': 42107850}
方案2:使用pandas实现(适合大数据量/数据分析场景)
如果已经在使用pandas处理数据,实现逻辑会更简洁:
import pandas as pd df = pd.DataFrame(data) daily_max = df.groupby('Reportdt')['Total_Vaccinations'].max().to_dict() print(daily_max) # 输出结果和方案1完全一致
内容的提问来源于stack exchange,提问作者Khalid Alolayan
相关产品推荐
相关产品推荐

