如何在Pandas中将多时间戳行转换为特定时间多度量单行
Pandas 分钟级交易数据转日期-指定时间点宽表方案
假设你的原始数据结构如下(datetime 为包含日期+分钟的时间戳列,price 为股价列):
import pandas as pd # 示例数据 data = { 'datetime': ['2024-05-20 11:59:00', '2024-05-20 12:00:00', '2024-05-20 14:00:00', '2024-05-21 12:00:00', '2024-05-21 14:00:00', '2024-05-21 14:01:00'], 'price': [100.1, 100.3, 101.2, 102.5, 103.0, 103.1] } df = pd.DataFrame(data) df['datetime'] = pd.to_datetime(df['datetime'])
处理步骤
拆分日期与时间字段
从时间戳中提取纯日期和时分格式的时间:df['date'] = df['datetime'].dt.date # 提取日期(如2024-05-20) df['time'] = df['datetime'].dt.strftime('%H:%M') # 提取时分(如12:00)筛选目标时间点
定义需要保留的时间点列表,过滤数据:target_times = ['12:00', '14:00'] filtered_df = df[df['time'].isin(target_times)]透视转换为宽表
使用pivot_table重塑数据,若同一天同一时间有多个数据,可通过aggfunc指定聚合规则(比如取最后一条记录的股价):result_df = filtered_df.pivot_table( index='date', columns='time', values='price', aggfunc='last' # 可选:'mean' 取平均,'first' 取第一条 ).reset_index() # 重命名列名(可选,让列名更直观) result_df.columns = ['date', 'price_1200', 'price_1400']
最终结果示例
date price_1200 price_1400 0 2024-05-20 100.3 101.2 1 2024-05-21 102.5 103.0
注意事项
- 如果原始数据中存在某日期缺少目标时间点的情况,结果中对应列会显示
NaN,可通过fillna()方法填充默认值(如前一日数据或0)。 - 若时间戳包含秒数(如
12:00:00),提取时分时需调整格式为%H:%M:%S或统一截断到分钟级。
内容的提问来源于stack exchange,提问作者user19563956
相关产品推荐
相关产品推荐

