如何对数据列表按日期进行分组?
如何对数据列表按日期进行分组?
嘿,这个需求太常见啦!我给你分享几种主流编程语言里的实现思路,你可以根据自己用的技术栈来选:
Python 实现方法
方法1:用标准库 itertools.groupby
这个方法需要先把数据按日期排序(因为groupby只会把连续的相同键分到一组),然后再分组。举个例子:
from itertools import groupby # 示例数据,假设每个元素是包含日期和其他信息的字典 data = [ {"date": "2024-05-20", "value": 10}, {"date": "2024-05-21", "value": 20}, {"date": "2024-05-20", "value": 15}, {"date": "2024-05-22", "value": 30}, ] # 先按日期排序 sorted_data = sorted(data, key=lambda x: x["date"]) # 按日期分组 grouped_data = {} for date, items in groupby(sorted_data, key=lambda x: x["date"]): grouped_data[date] = list(items) print(grouped_data)
方法2:用 pandas(更适合处理大量数据)
如果是处理数据集,pandas会更高效,几行代码就能搞定:
import pandas as pd df = pd.DataFrame(data) grouped_df = df.groupby("date") # 可以把分组结果转成字典格式 grouped_dict = grouped_df.apply(lambda x: x.to_dict("records")).to_dict() print(grouped_dict)
JavaScript 实现方法
用数组的reduce方法来构建分组对象,灵活又好用:
// 示例数据 const data = [ { date: "2024-05-20", value: 10 }, { date: "2024-05-21", value: 20 }, { date: "2024-05-20", value: 15 }, { date: "2024-05-22", value: 30 }, ]; const groupedData = data.reduce((acc, item) => { // 如果当前日期还没作为键,就新建一个空数组 if (!acc[item.date]) { acc[item.date] = []; } // 把当前元素加入对应日期的数组 acc[item.date].push(item); return acc; }, {}); console.log(groupedData);
小提醒
不管用哪种方法,一定要保证日期格式统一!比如别一会儿用"2024/05/20",一会儿用"2024-05-20",不然会被当成不同的日期分错组哦。如果是用日期对象,还要注意时区差异的问题,避免出现分组偏差。
备注:内容来源于stack exchange,提问作者Mark Adams
相关产品推荐
相关产品推荐

