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

如何为Pandas DataFrame按id列添加分组关联新列?

给Pandas DataFrame添加与id关联的分组列

没问题,这其实是Pandas里很常见的分组映射需求,下面给你几种简单实用的实现方式,都能达到你想要的效果:

方法一:字典映射(最直观可控)

如果已经明确知道每个id对应的颜色,直接用字典映射是最清晰的方式:

import pandas as pd

# 先构造你的原始DataFrame
df = pd.DataFrame({
    'id': [1, 1, 2, 2, 3, 3],
    'x': [0.3, 0.2, 0.1, 0.9, 0.8, 0.7],
    'y': [0.4, 0.5, 0.6, 0.1, 0.2, 0.3]
})

# 创建id到颜色的映射字典
color_mapping = {1: 'green', 2: 'black', 3: 'red'}

# 给DataFrame添加color列
df['color'] = df['id'].map(color_mapping)

# 输出结果
print(df)

运行后就能得到你想要的结果,同一id的行会自动匹配对应的颜色,非常好维护。

方法二:自动分配颜色(适合id数量较多的场景)

如果你的id数量很多,不想手动写映射字典,可以用factorize()自动给每个唯一id分配编码,再对应到颜色列表:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 1, 2, 2, 3, 3],
    'x': [0.3, 0.2, 0.1, 0.9, 0.8, 0.7],
    'y': [0.4, 0.5, 0.6, 0.1, 0.2, 0.3]
})

# 定义颜色列表,顺序对应id首次出现的顺序
color_list = ['green', 'black', 'red']
# factorize()返回的第一个元素是每个id对应的编码(0、1、2...),再映射到颜色
df['color'] = df['id'].factorize()[0].map(lambda idx: color_list[idx])

print(df)

这种方法不需要手动绑定每个id和颜色,适合动态生成分组颜色的场景。

方法三:用replace()实现(写法更简洁)

这是和字典映射效果一致的另一种写法,语法更简洁,看个人习惯选择:

df['color'] = df['id'].replace({1: 'green', 2: 'black', 3: 'red'})

最终输出效果

不管用哪种方法,最终都会得到如下结果:

xycolor
0.30.4green
0.20.5green
0.10.6black
0.90.1black
0.80.2red
0.70.3red

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:32