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

如何将Pandas DataFrame分组列中的值替换为前一分组的值

解决方法

要实现将每个分组的A列替换为前一个分组的A值,第一个分组设为NaN的需求,我们可以利用Pandas的分组和映射功能快速完成,这里提供两种实用思路:

方法一:简洁映射法

这种方法代码紧凑,核心是利用分组提取唯一值后直接移位映射,适合快速实现:

import pandas as pd

# 构造原数据(替换成你自己的DataFrame即可)
data = {
    'country': [0,1,2,3,4,5,6,7,8,9,10,11],
    'group': [1,1,1,2,2,2,2,2,3,3,3,3],
    'A': ['a1','a1','a1','a2','a2','a2','a2','a2','a3','a3','a3','a3'],
    'B': [10,11,12,50,51,52,53,50,51,52,53,53],
    'C': [20,21,22,60,61,62,63,60,61,62,63,63],
    'D': [30,31,32,70,71,72,73,70,71,72,73,73]
}
df = pd.DataFrame(data)

# 1. 提取每个分组的A列唯一值(因每个分组A值统一),移位得到前一个分组的A值
prev_group_a = df.groupby('group')['A'].first().shift()

# 2. 将每个group映射到对应前分组的A值,替换原A列
df['A'] = df['group'].map(prev_group_a)

方法二:分步合并法

如果需要清晰追踪每一步的变化,这种分步方式更易理解逻辑:

import pandas as pd

# 构造原DataFrame
data = {
    'country': [0,1,2,3,4,5,6,7,8,9,10,11],
    'group': [1,1,1,2,2,2,2,2,3,3,3,3],
    'A': ['a1','a1','a1','a2','a2','a2','a2','a2','a3','a3','a3','a3'],
    'B': [10,11,12,50,51,52,53,50,51,52,53,53],
    'C': [20,21,22,60,61,62,63,60,61,62,63,63],
    'D': [30,31,32,70,71,72,73,70,71,72,73,73]
}
df = pd.DataFrame(data)

# 1. 创建分组与A值的映射表
group_a_map = df.groupby('group')['A'].first().reset_index()

# 2. 移位生成前一个分组的A值,第一个分组自动变为NaN
group_a_map['prev_A'] = group_a_map['A'].shift(1)

# 3. 合并映射表到原数据,替换A列并清理临时列
df = df.merge(group_a_map[['group', 'prev_A']], on='group', how='left')
df['A'] = df['prev_A']
df.drop('prev_A', axis=1, inplace=True)

两种方法最终都会得到你想要的结果:第一个分组的A列全部变为NaN,group2的A列替换为group1的a1,group3的A列替换为group2的a2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:27:39