如何合并不同时间粒度的两个Pandas DataFrame并按日期时间排序
Pandas 不同时间粒度表合并排序实现方法
操作分三步完成:
- 对齐两个DataFrame的字段结构:日度表
daily_df没有time列,先给这列赋值为空字符串,和小时表sixtymin_df的字段保持完全一致 - 纵向拼接两个表
- 按规则排序:先按
date字段升序,同日期下按time字段升序——空字符串的排序优先级早于任何时间字符串,刚好能让日度数据排在当日所有小时数据前面,完全匹配预期输出
完整实现代码:
import pandas as pd # 1. 给日度数据补充空time列,对齐字段 daily_df['time'] = '' # 2. 纵向合并两个表,重置索引 merged_df = pd.concat([daily_df, sixtymin_df], ignore_index=True) # 3. 按要求排序,重置索引 # 注意:如果date是dd/mm/yyyy格式的字符串,先转datetime类型避免字符串排序逻辑错误 merged_df['date'] = pd.to_datetime(merged_df['date'], format='%d/%m/%Y') merged_df = merged_df.sort_values(by=['date', 'time'], ignore_index=True) # 如果需要保留原字符串样式的日期输出,排序后转回去即可 merged_df['date'] = merged_df['date'].dt.strftime('%d/%m/%Y')
执行后输出的merged_df结构和示例预期完全一致:
date time change type 0 14/06/2022 50% daily 1 14/06/2022 12:00:00 27% hourly 2 14/06/2022 13:00:00 12% hourly 3 14/07/2022 46% daily
补充说明:如果后续需要调整日度数据在当日的排序位置,不用空字符串,可以给日度数据的time列赋值
'00:00:00'或者其他你想要锚定的排序时间点即可,排序逻辑不用改。
内容的提问来源于stack exchange,提问作者boioboi
相关产品推荐
相关产品推荐

