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

如何遍历DataFrame每间隔57行对指定3行按列求和并替换原行

实现方案(基于Pandas)

以下代码可直接复现你的需求,两种实现方式分别适配不同数据量场景:

前置准备:依赖导入+测试数据构造

import pandas as pd
import numpy as np

# 构造和你描述结构一致的测试DataFrame
df = pd.DataFrame(
    np.concatenate([
        np.full((3,3), 10),   # 0-2行值为10
        np.full((54,3), 0),   # 3-56行(共54行)占位
        np.full((3,3), 20),   # 57-59行值为20
        np.full((54,3), 0),   # 60-113行(共54行)占位
        np.full((3,3), 30)    # 114-116行值为30
    ]),
    columns=['2020/01/02', '2020/02/01', '2020/03/01']
)

方法1:循环实现(逻辑直观,适合中小数据量)

step = 57  # 每组起始位置的间隔
group_size = 3  # 每组需要求和的连续行数

sum_list = []
# 遍历所有组的起始索引
for start_idx in range(0, len(df), step):
    # 对每组连续3行按列求和,存入列表
    group_sum = df.iloc[start_idx: start_idx + group_size].sum()
    sum_list.append(group_sum)

# 转换为DataFrame,索引保留原始组的起始位置
result_df = pd.DataFrame(sum_list, index=range(0, len(df), step))

方法2:向量化分组实现(性能更高,适合百万级以上大数据量)

step = 57
group_size = 3

# 生成分组标签:目标组内的行标记为组起始索引,非目标组标记为空
group_label = np.full(len(df), np.nan)
for start_idx in range(0, len(df), step):
    group_label[start_idx: start_idx + group_size] = start_idx

# 按组求和,自动丢弃非目标组
result_df = df.groupby(group_label).sum()

最终输出result_df即可得到你需要的结果:

索引2020/01/022020/02/012020/03/01
0303030
57606060
114909090

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:03