Pandas中如何按组内首个Note重命名Code分组?
解决Pandas按组替换分组列为组内首次出现值的问题
嘿,这个需求其实很容易实现,用Pandas的分组功能就能搞定!我给你两种方法,都能达到你想要的效果,咱们一步步来:
先准备示例数据
首先咱们先把你给出的示例转换成Pandas DataFrame,方便后续演示:
import pandas as pd # 你的输入数据 data = { 'CODE': ['A', 'B', 'A', 'B', 'C'], 'NOTE': ['Banana', 'Cola', 'Apple', 'Fanta', 'Toy'] } df = pd.DataFrame(data)
此时的输入DataFrame是:
| CODE | NOTE | |
|---|---|---|
| 0 | A | Banana |
| 1 | B | Cola |
| 2 | A | Apple |
| 3 | B | Fanta |
| 4 | C | Toy |
方法一:用分组映射字典替换
这种方法先构建一个“分组键(CODE)→组内首个NOTE”的映射字典,再用这个字典替换原CODE列:
# 第一步:获取每个CODE对应的首个NOTE,转成字典 code_first_note_map = df.groupby('CODE')['NOTE'].first().to_dict() # 第二步:用字典替换原CODE列 df['CODE'] = df['CODE'].map(code_first_note_map)
方法二:用transform直接广播组内首个值(更简洁)
Pandas的transform方法可以将分组计算的结果广播到组内的每一行,一步到位:
df['CODE'] = df.groupby('CODE')['NOTE'].transform('first')
最终结果
两种方法执行后,你都会得到想要的输出:
| CODE | NOTE | |
|---|---|---|
| 0 | Banana | Banana |
| 1 | Cola | Cola |
| 2 | Banana | Apple |
| 3 | Cola | Fanta |
| 4 | Toy | Toy |
简单解释下原理:groupby('CODE')['NOTE'].first()会提取每个CODE分组里第一次出现的NOTE值,不管是转成字典映射还是用transform广播,最终都是把原CODE列的每个值替换成对应分组的首个NOTE。
内容的提问来源于stack exchange,提问作者AnonX
相关产品推荐
相关产品推荐

