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

基于DataFrame提取CSV中Byte非零连续组的起止时间

Python提取DataFrame中Byte非零连续组的起止时间

需要实现的功能:从CSV文件对应的Pandas DataFrame中,提取Byte值非零的连续数据组的以下信息:

  • 开始时间:该组内Byte首次非零对应的Date-Time
  • 结束时间:该组内Byte最后一次非零对应的Date-Time;若该组是文件的最后一行数据,结束时间留空

样本1(Sample-1)

原始数据

Date-Time,Func,Byte
2023/01/01 16:45:13,APP,0
2023/01/01 16:57:08,APP,1
2023/01/01 17:10:44,APP,5
2023/01/01 17:11:04,APP,0
2023/01/01 17:12:24,APP,0
2023/01/01 17:15:27,APP,4
2023/01/01 17:16:08,APP,4

预期输出

Date/Time(Start)         Func         Date/Time(End)
2023/01/01 16:57:08      APP         2023/01/01 17:10:44
2023/01/01 17:15:27      APP

样本2(Sample-2)

原始数据

Date-Time,Func,Byte
2023/01/01 16:45:13,APP,4
2023/01/01 16:57:08,APP,1
2023/01/01 17:10:44,APP,5
2023/01/01 17:11:04,APP,0
2023/01/01 17:12:24,APP,0
2023/01/01 17:15:27,APP,4
2023/01/01 17:16:08,APP,4
2023/01/01 17:16:20,APP,0

预期输出

Date/Time(Start)         Func         Date/Time(End)
2023/01/01 16:45:13      APP         2023/01/01 17:10:44
2023/01/01 17:15:27      APP         2023/01/01 17:16:08

Python实现代码

import pandas as pd

def extract_non_zero_groups(file_path):
    # 读取CSV文件
    df = pd.read_csv(file_path)
    # 转换时间列为datetime类型
    df['Date-Time'] = pd.to_datetime(df['Date-Time'], format='%Y/%m/%d %H:%M:%S')
    
    # 标记非零行,生成连续非零组的ID
    df['non_zero'] = df['Byte'] != 0
    df['group_id'] = (df['non_zero'] != df['non_zero'].shift()).cumsum()
    
    # 筛选非零组并提取起止时间
    non_zero_groups = df[df['non_zero']].groupby('group_id')
    result = non_zero_groups.agg(
        start_time=('Date-Time', 'first'),
        func=('Func', 'first'),
        end_time=('Date-Time', 'last')
    ).reset_index(drop=True)
    
    # 检查最后一组是否为原数据最后一行,是则清空结束时间
    last_group_last_row = non_zero_groups.last().iloc[-1]
    if last_group_last_row.name == df.index[-1]:
        result.loc[len(result)-1, 'end_time'] = pd.NaT
    
    # 格式化时间为字符串,空值留空
    result['start_time'] = result['start_time'].dt.strftime('%Y/%m/%d %H:%M:%S')
    result['end_time'] = result['end_time'].dt.strftime('%Y/%m/%d %H:%M:%S').fillna('')
    
    # 重命名列名匹配预期输出
    result.columns = ['Date/Time(Start)', 'Func', 'Date/Time(End)']
    
    return result

# 示例调用(替换为你的文件路径)
# sample1_result = extract_non_zero_groups('sample1.csv')
# print(sample1_result.to_string(index=False))
# sample2_result = extract_non_zero_groups('sample2.csv')
# print(sample2_result.to_string(index=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:07:47