如何在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
相关产品推荐
相关产品推荐

