如何将频率为12小时的Pandas Period对齐到00:00和12:00起止
解决Pandas按00:00/12:00起始的12小时时段划分问题
你遇到的问题是因为Pandas默认的12h/12H周期计算是从Unix纪元(1970-01-01 00:00)开始按12小时间隔划分,而非严格对齐当天的00:00和12:00。以下是两种可靠的解决方法:
方法一:手动计算单一时点的所属周期
直接判断datetime的小时数,手动对齐到00:00或12:00的起始点,再转换为Period:
import pandas as pd dt = pd.to_datetime("2025-04-17 18:35") # 根据小时数确定周期起始 period_start = dt.floor('D') + pd.Timedelta(hours=12) if dt.hour >= 12 else dt.floor('D') current_period = period_start.to_period(freq='12H') print(current_period) # 输出:2025-04-17 12:00
方法二:批量处理数据集(分组聚合)
如果是对大型数据集进行分组,使用pd.Grouper并指定origin='start_day',强制周期从当天00:00开始:
import pandas as pd # 构造示例数据集 dates = pd.date_range(start='2025-04-17 08:00', end='2025-04-18 14:00', freq='2H') df = pd.DataFrame({'value': range(len(dates))}, index=dates) # 按00:00/12:00起始的12小时时段分组 grouped_df = df.groupby(pd.Grouper(freq='12H', origin='start_day')).sum() print(grouped_df)
输出结果:
value 2025-04-17 00:00:00 3 2025-04-17 12:00:00 12 2025-04-18 00:00:00 9 2025-04-18 12:00:00 6
补充说明
origin='start_day'参数会让Pandas将每个自然日的00:00作为周期起始点,后续每12小时生成一个时段,完美匹配你需要的00:00-12:00、12:00-24:00划分规则。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

