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

如何在Python DataFrame中按指定频率用前值替换列单元格值

解决方案

假设我们有一个包含1到20的DataFrame列,目标是将每3个后续单元格替换为前一个单元格的值,形成每4个重复的分组(如1重复4次、5重复4次等),以下是几种Python实现方式:

步骤1:创建示例数据

首先构建测试用的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col': range(1, 21)})

方法1:使用groupby + transform

通过索引整数除法分组,每组取第一个元素并广播到组内所有行:

df['new_col'] = df.groupby(df.index // 4)['col'].transform('first')
  • 原理:df.index // 4会将索引划分为0-3、4-7等4元素分组,每组的第一个元素即为需要重复的基准值,transform('first')将该值应用到组内所有行。

方法2:使用Numpy Reshape

利用数组重塑提取每组首值,再重复填充:

df['new_col'] = df['col'].values.reshape(-1, 4)[:, 0].repeat(4)
  • 原理:reshape(-1, 4)将原数组拆分为5个4元素子数组,[:, 0]提取每个子数组的第一个元素,repeat(4)将每个首值重复4次,刚好匹配原列长度。

方法3:手动分组映射

手动生成分组首值列表,通过组索引映射填充:

group_size = 4
# 提取所有分组的首值
group_heads = df['col'].iloc[::group_size].tolist()
# 为每行分配组索引并映射对应首值
df['new_col'] = (df.index // group_size).map(lambda x: group_heads[x])

执行上述任意方法后,new_col列的结果即为:

[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13,17,17,17,17]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:07