如何高效按条件汇总文件中指定行的数值?
高效实现按时间段分组求和的方案
针对你需要按Id、Date和指定时间段汇总value的需求,用Python的Pandas是最高效的方案,尤其适合处理大规模CSV数据。以下是具体实现步骤:
步骤说明
- 读取CSV数据并解析时间列,方便时间段判断
- 定义规则,将每条数据映射到对应的时间段结束时间
- 按
Id、Date和结束时间段分组,对value求和 - 调整输出格式,匹配预期结果
完整代码实现
import pandas as pd # 读取CSV数据(替换为你的文件路径) df = pd.read_csv('your_data.csv') # 将Time列转为时间格式,提取小时用于判断时间段 df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S') df['hour'] = df['Time'].dt.hour # 定义时间段与结束时间的映射逻辑 def map_end_time(hour): if 1 <= hour <= 6: return '06:00:00' elif 7 <= hour <= 12: return '12:00:00' elif 13 <= hour <= 18: return '18:00:00' elif 19 <= hour <= 23 or hour == 0: return '00:00:00' return None df['end_time'] = df['hour'].apply(map_end_time) # 分组求和,按Id、Date、结束时间聚合 result = df.groupby(['Id', 'Date', 'end_time'], as_index=False)['value'].sum() # 重命名列以匹配预期输出 result.rename(columns={'end_time': 'Time'}, inplace=True) # 输出结果(如需保存为CSV,使用result.to_csv('output.csv', index=False)) print(result)
结果验证
运行代码后,针对你提供的示例数据,会得到如下输出:
| Id | Date | Time | value |
|---|---|---|---|
| 11001 | 20240901 | 06:00:00 | 2.8 |
| 11001 | 20240901 | 12:00:00 | 1.9 |
| 11002 | 20240901 | 06:00:00 | 2.1 |
| 11002 | 20240901 | 12:00:00 | 2.15 |
完全匹配你的预期结果。
性能说明
Pandas的分组聚合基于底层优化实现,处理百万级以上数据时效率远高于手动循环。如果数据量极大,还可以结合dask.dataframe进行并行处理,进一步提升速度。
内容的提问来源于stack exchange,提问作者akann
相关产品推荐
相关产品推荐

