You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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'])

处理步骤

  1. 拆分日期与时间字段
    从时间戳中提取纯日期和时分格式的时间:

    df['date'] = df['datetime'].dt.date  # 提取日期(如2024-05-20)
    df['time'] = df['datetime'].dt.strftime('%H:%M')  # 提取时分(如12:00)
    
  2. 筛选目标时间点
    定义需要保留的时间点列表,过滤数据:

    target_times = ['12:00', '14:00']
    filtered_df = df[df['time'].isin(target_times)]
    
  3. 透视转换为宽表
    使用 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:36:28