如何用Pandas为DataFrame生成每日重复的24小时时间间隔列?
Pandas生成每日24小时时间间隔并关联多ID的实现方案
需求说明
输入DataFrame包含ID分类字段和日期列,需要生成每个ID对应每一天的24条记录,每条记录新增格式为00:00 - 01:00的“时间间隔”列,最终得到ID、Date、时间间隔的全组合结果。
实现步骤与代码
核心思路是通过笛卡尔积实现ID、日期、时间间隔的全关联,直接生成目标格式的时间间隔字符串,替代复杂的interval操作:
import pandas as pd # 假设原输入数据为 df_input # 提取日期范围 start_date = df_input['Date'].min() end_date = df_input['Date'].max() # 生成固定格式的24小时时间间隔列表 time_intervals = [f"{hour:02d}:00 - {(hour+1):02d}:00" for hour in range(24)] # 生成日期数据集 date_df = pd.DataFrame({'Date': pd.date_range(start=start_date, end=end_date, freq='1D')}) # 生成日期与时间间隔的全组合(笛卡尔积) date_time_comb = date_df.assign(join_key=1) \ .merge(pd.DataFrame({'时间间隔': time_intervals, 'join_key': 1}), on='join_key') \ .drop('join_key', axis=1) # 生成ID与日期-时间间隔的全组合,得到最终结果 unique_ids = df_input[['ID']].drop_duplicates() final_result = unique_ids.assign(join_key=1) \ .merge(date_time_comb, on='join_key') \ .drop('join_key', axis=1)
为什么不用pd.interval_range?
pd.interval_range生成的是Pandas时间间隔对象,若要转换为目标字符串格式仍需额外处理;直接通过字符串格式化生成所需的时间间隔文本,再结合笛卡尔积关联,步骤更简洁直接,完全匹配需求。
内容的提问来源于stack exchange,提问作者AMIT BISHT
相关产品推荐
相关产品推荐

