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

如何基于Linux Timestamp列向Pandas DataFrame添加多周期分钟数列?

问题描述

我有一个包含Linux时间戳列的Pandas DataFrame,需要从该时间戳列提取各周期的分钟数,包括minute_of_hour、minute_of_day、minute_of_week、minute_of_month、minute_of_year,且因数据表规模庞大,不能使用循环,需高效解决。

原始数据示例:

TimeStamp   var1   var2
1659494100  5.22   6.34
1659494160  4.33   7.33
1659494220  5.46   7.21
1659494280  4.33   4.51
1659494340  6.45   5.67
...

期望输出格式:

TimeStamp   var1   var2   minute_of_hour   minute_of_day   minute_of_week   minute_of_month   minute_of_year
1659494100  5.22   6.34         35              155             3035              3035            308315
1659494160  4.33   7.33         36              156             3036              3036            308316
1659494220  5.46   7.21         37              157             3037              3037            308317
1659494280  4.33   4.51         38              158             3038              3038            308318
1659494340  6.45   5.67         39              159             3039              3039            308319
...
高效解决方案

利用Pandas的矢量化时间操作处理,完全避免循环,适配大规模数据集:

  • 将Linux时间戳转换为Pandas datetime类型
    先把TimeStamp列转成datetime64[ns]格式,这是后续所有时间计算的基础,操作是矢量化的,效率极高:

    import pandas as pd
    
    # 假设你的DataFrame名为df
    df['datetime'] = pd.to_datetime(df['TimeStamp'], unit='s')
    
  • 计算各周期分钟数
    基于转换后的datetime列,通过Pandas的dt访问器进行矢量化计算:

    # 小时内的分钟数:直接取分钟值
    df['minute_of_hour'] = df['datetime'].dt.minute
    
    # 一天内的分钟数:小时数*60 + 分钟数
    df['minute_of_day'] = df['datetime'].dt.hour * 60 + df['datetime'].dt.minute
    
    # 一周内的分钟数:周几(0=周一,6=周日)*1440 + 一天内分钟数
    df['minute_of_week'] = df['datetime'].dt.dayofweek * 1440 + df['minute_of_day']
    
    # 一月内的分钟数:当前时间与当月第一天的时间差转成总分钟数
    month_start = df['datetime'].dt.to_period('M').dt.start_time
    df['minute_of_month'] = (df['datetime'] - month_start).dt.total_seconds() // 60
    
    # 一年内的分钟数:当前时间与当年第一天的时间差转成总分钟数
    year_start = df['datetime'].dt.to_period('Y').dt.start_time
    df['minute_of_year'] = (df['datetime'] - year_start).dt.total_seconds() // 60
    
  • (可选)清理临时列
    如果不需要保留datetime列,可以删除:

    df.drop('datetime', axis=1, inplace=True)
    

关键说明

  • 所有操作均为Pandas底层优化的矢量化运算,处理速度远快于Python循环,适合百万级甚至更大规模的数据集;
  • 周起始默认遵循Pandas规则(周一为0),若需改为周日为0,可将dt.dayofweek替换为(df['datetime'].dt.weekday + 1) % 7;
  • 计算月/年分钟数时,通过to_period获取周期起始时间,再计算时间差的总秒数并转换为分钟,逻辑准确且高效。

内容的提问来源于stack exchange,提问作者Marcin Dudziuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:50:44