向过滤的熊猫DataFrame添加新值 - python

我正在使用Python为素数生成可视化生成器,但是在将颜色与给定数字的唯一素数链接时遇到了麻烦。这是基本设置(我正在使用pyprimes来获取数据变量的因子,但是此硬编码列表适用于此):

import pandas as pd
import numpy as np
data = [2,2,2,3,7,7,23]
df = pd.DataFrame(data,columns=["prime"])
colors = [
'DarkOrange',
'DeepSkyBlue',
'Yellow',
'Purple',
'Salmon',
'Lime',
'Peru',
'LightPink'
]

一切都很好,现在我想将一些独特的颜色链接到DataFrame中的独特素数。一种方法是:

for unique_prime in set(data):
        df['color']= np.where(df['prime'] == unique_prime,colors.pop(),#what to put here?)

但是,当然,无论我放在最后一个插槽中的内容,最终都会替换for循环末尾的所有先前颜色值。我能在最后一点说什么来忽略其他值吗?还是有更好的方法来解决此问题。

谢谢!

python大神给出的解决方案

[此外:给出所需输出的具体示例通常是个好主意。这有助于避免您对所要追求的东西含糊不清。]

IIUC,您可以构建数字到颜色的字典,然后使用replace方法。例如:

>>> cmap = dict(zip(df.prime.unique(), colors))
>>> cmap
{23: 'Purple', 2: 'DarkOrange', 3: 'DeepSkyBlue', 7: 'Yellow'}
>>> df["color"] = df["prime"].replace(cmap)
>>> df
   prime        color
0      2   DarkOrange
1      2   DarkOrange
2      2   DarkOrange
3      3  DeepSkyBlue
4      7       Yellow
5      7       Yellow
6     23       Purple