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

如何将Pandas单列数据按大于0的分组拆分为多列?

解决方案
  • 第一步:给连续测试数据组打唯一标签
    通过判断数据从0切换到非0的节点识别新测试组,生成标签列标记每组:

    import pandas as pd
    
    # 读取日志数据,无表头则指定列名
    df = pd.read_csv('file.log', header=None, names=['value'])
    
    # 标记是否为有效测试数据(值>0)
    df['is_test'] = df['value'] > 0.0
    # 生成测试组标签:每次遇到新的非0序列时标签自动+1
    df['test_label'] = (df['is_test'] & ~df['is_test'].shift(1, fill_value=False)).cumsum()
    
    # 过滤掉0值数据,仅保留测试组内容
    test_data = df[df['is_test']].drop(columns=['is_test'])
    
  • 第二步:生成groupby对象
    直接按生成的test_label分组即可:

    test_groups = test_data.groupby('test_label')
    # 示例:遍历查看每组数据
    for label, group in test_groups:
        print(f"测试组 {label} 样本量:{len(group)}")
    
  • 第三步:转成以test1、test2为列的新DataFrame
    若需将每个测试组作为单独一列,因各组长度可能不同,会自动用NaN补全空缺:

    # 将每组数据转为单列,合并后重命名列名
    test_columns = pd.concat(
        [group['value'].reset_index(drop=True) for _, group in test_groups],
        axis=1
    )
    test_columns.columns = [f'test{i+1}' for i in range(test_columns.shape[1])]
    

说明

  • 核心逻辑是用shift()对比前后行,识别测试组的起始节点,再通过cumsum()生成递增的组标签
  • 若原始日志自带表头,去掉header=None, names=['value']参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:50:24