如何按条件将数据聚合为多个不同的求和列?
多条件聚合为不同求和列的解决方案
嘿,我来帮你搞定这个多条件聚合求和的需求!看你给的数据集,是要把不同Category的Total按时间维度(比如小时)拆分汇总成单独的列对吧?下面给你几个常用的实现方法,总有一款适合你:
方法1:Excel 数据透视表(适合可视化快速操作)
如果是用Excel处理这份数据,数据透视表是最省心的选择:
- 选中整个数据集(包括表头行)
- 点击「插入」选项卡的「数据透视表」,按提示确认放置透视表的位置
- 在右侧的透视表字段面板里做如下设置:
- 把「DateTime」拖到「行」区域,右键点击它选择「分组」,设置按小时分组(刚好适配你每15分钟一条的数据频率)
- 把「Category」拖到「列」区域
- 把「Total」拖到「值」区域,确认汇总方式是「求和」
这样就能得到每行对应一个小时、每列对应一个Category的求和结果,比如9点的Arf总和是4,Bork总和是2,完美符合你的需求。
方法2:SQL 查询(适合数据库批量处理)
如果数据存储在数据库表(假设表名为your_table),可以用条件聚合的方式直接查询出结果:
SELECT DATE_TRUNC('hour', DateTime) AS Hour, SUM(CASE WHEN Category = 'Arf' THEN Total ELSE 0 END) AS Arf_Total, SUM(CASE WHEN Category = 'Bork' THEN Total ELSE 0 END) AS Bork_Total FROM your_table GROUP BY DATE_TRUNC('hour', DateTime) ORDER BY Hour;
原理很简单:用CASE语句判断每条记录的Category,只对目标类别的Total求和,然后按小时分组,最终得到每个时间区间下不同类别的单独求和列。
方法3:Python Pandas(适合数据分析自动化)
如果需要用代码自动化处理这类任务,Pandas的透视表功能可以轻松实现:
import pandas as pd # 构造你的数据集(如果是从文件读取,用pd.read_csv即可) df = pd.DataFrame({ 'DateTime': ['3/23/18 9:00 AM', '3/23/18 9:15 AM', '3/23/18 9:30 AM', '3/23/18 9:45 AM', '3/23/18 10:00 AM', '3/23/18 10:15 AM', '3/23/18 10:30 AM', '3/23/18 10:45 AM', '3/23/18 11:00 AM', '3/23/18 11:15 AM', '3/23/18 11:30 AM', '3/23/18 11:45 AM'], 'Category': ['Bork', 'Arf', 'Bork', 'Arf', 'Bork', 'Arf', 'Bork', 'Arf', 'Bork', 'Arf', 'Bork', 'Arf'], 'Total': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2] }) # 转换时间格式并按小时分组透视 df['DateTime'] = pd.to_datetime(df['DateTime']) aggregated_df = df.pivot_table( index=df['DateTime'].dt.floor('h'), # 按小时向下取整分组 columns='Category', values='Total', aggfunc='sum' ).reset_index() # 重命名列名让结果更清晰 aggregated_df.columns = ['Hour', 'Arf_Total', 'Bork_Total'] print(aggregated_df)
运行这段代码后,你会得到一个结构化的DataFrame,包含每个小时对应的Arf和Bork的求和值,方便后续分析或导出。
内容的提问来源于stack exchange,提问作者Infin8Loop
相关产品推荐
相关产品推荐

