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

基于分组内各进程起止时间的Pandas DataFrame重采样问题

解决方案:按分组和进程对时间范围进行1分钟频率重采样

核心思路

直接用resample无法满足需求,因为原数据没有现成的时间序列,只有每个进程的起止时间。正确做法是:对每个(Group, Process)分组,根据其StartTime和EndTime生成1分钟间隔的时间戳序列,再将所有分组的结果合并成最终DataFrame。

步骤实现

1. 准备数据并转换时间格式

首先确保时间列是datetime类型,否则无法生成时间序列:

import pandas as pd

# 示例输入数据
data = {
    'Group': ['A', 'A', 'B'],
    'Process': ['P1', 'P2', 'P1'],
    'StartTime': ['2024-05-20 08:15:00', '2024-05-20 09:00:00', '2024-05-20 10:30:00'],
    'EndTime': ['2024-05-20 08:18:30', '2024-05-20 09:02:15', '2024-05-20 10:31:45']
}
df = pd.DataFrame(data)

# 转换时间列为datetime类型
df['StartTime'] = pd.to_datetime(df['StartTime'])
df['EndTime'] = pd.to_datetime(df['EndTime'])

2. 定义生成时间序列的函数

这个函数负责处理单个分组,生成该进程在起止时间内的1分钟间隔时间戳:

def generate_minute_samples(group):
    start = group['StartTime'].iloc[0]
    end = group['EndTime'].iloc[0]
    # 生成1分钟间隔的时间序列,确保不超过结束时间
    timestamps = pd.date_range(start=start, end=end, freq='1min', inclusive='left')
    # 如果结束时间不在分钟点,补充最后一个有效分钟戳(可选,按需调整)
    if (end - timestamps[-1]).total_seconds() > 0:
        timestamps = timestamps.append(pd.DatetimeIndex([end.floor('min')]))
    # 构造包含分组信息的结果DataFrame
    return pd.DataFrame({
        'Group': group['Group'].iloc[0],
        'Process': group['Process'].iloc[0],
        'Sample Timestamp': timestamps
    })

3. 分组应用函数并合并结果

通过groupby按分组和进程拆分数据,应用函数后合并所有结果:

final_df = df.groupby(['Group', 'Process']).apply(generate_minute_samples).reset_index(drop=True)

示例输出

Group Process      Sample Timestamp
0     A      P1 2024-05-20 08:15:00
1     A      P1 2024-05-20 08:16:00
2     A      P1 2024-05-20 08:17:00
3     A      P1 2024-05-20 08:18:00
4     A      P2 2024-05-20 09:00:00
5     A      P2 2024-05-20 09:01:00
6     A      P2 2024-05-20 09:02:00
7     B      P1 2024-05-20 10:30:00
8     B      P1 2024-05-20 10:31:00

注意事项

  • inclusive='left'参数确保生成的时间戳不会超过EndTime,如果需要包含EndTime所在的分钟点,可以调整该参数或修改补充逻辑。
  • 如果同一(Group, Process)存在多条起止时间记录,需要先合并时间范围再生成序列,当前代码默认每组仅有一条记录。

内容的提问来源于stack exchange,提问作者Debadri Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:24:27