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

Python循环处理二进制转日期大数据的性能优化方案

你原有代码运行速度极慢的核心原因有两个:

  1. 循环内反复调用pd.concat拼接DataFrame,每次拼接都会全量复制已有结果,时间复杂度为O(n²),行数量级越高速度衰减越明显
  2. 每行都重复生成365天的日期序列,存在大量冗余计算

优化方案

直接使用Pandas内置的向量化展开操作替代显式Python循环,15000行的场景可以在秒级完成运算:

import pandas as pd

# 起始日期按需调整,你需求里写的是2020-12-13,原代码写的是2021-12-13请注意对齐
start_date = '2020-12-13'
# 预先生成一次全量日期序列,避免重复计算
fixed_dates = pd.date_range(start_date, periods=365, freq='D')

# 1. 将二进制字符串拆分为单字符列表
df['Code'] = df['binairy'].apply(list)
# 2. 按二进制位展开行,每一位对应单独一行
expanded_df = df.explode('Code', ignore_index=True)
# 3. 给每一行匹配对应日期:每组ID/Nature对应365个固定日期
expanded_df['Date'] = pd.np.tile(fixed_dates, len(df))
# 4. 提取需要的字段并对齐列名
result = expanded_df[['id', 'Nature', 'Date', 'Code']].rename(columns={'id': 'ID'})

如果你的二进制字符串长度不都是365位,可以用下面的适配版本:

import pandas as pd

start_date = pd.to_datetime('2020-12-13')
# 拆分二进制并展开
expanded_df = df.assign(Code=df['binairy'].apply(list)).explode('Code', ignore_index=True)
# 按原行分组计算偏移天数,生成对应日期
expanded_df['Date'] = start_date + expanded_df.groupby(level=0).cumcount().apply(lambda x: pd.Timedelta(days=x))
# 对齐输出列
result = expanded_df[['id', 'Nature', 'Date', 'Code']].rename(columns={'id': 'ID'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:04