向筛选后的pandas DataFram添加新值

2024-10-01 17:37:46 发布

您现在位置: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'
]

所有这些都是好的,现在我想把一些独特的颜色与数据帧中唯一的素数联系起来。一种方法是:

^{pr2}$

但当然,不管我在最后一个槽中放了什么,最后都会在for循环的末尾替换之前的所有颜色值。有什么东西我可以放在最后一个地方,说忽略其他值吗?或者有更好的方法来解决这个问题。在

谢谢你!在


Tags: 方法importpandas编码列表data数量链接
3条回答

[旁白:给出您想要的输出的具体示例通常是个好主意。这有助于避免对您的目标产生歧义。]

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

一个全熊猫的解决方案是使彩色地图成为熊猫数据帧,然后将其连接到primes数据帧:

cmap = pd.DataFrame({'prime' : [2,3,7,23], 
                     'color' : ['DarkOrange','DeepSkyBlue','Yellow','Purple']})
print df.merge(cmap)
   prime        color
0      2   DarkOrange
1      2   DarkOrange
2      2   DarkOrange
3      3  DeepSkyBlue
4      7       Yellow
5      7       Yellow
6     23       Purple

如果我理解正确,您希望迭代data并为每个值分配自己的颜色。在

如果是这样的话,我会:

counter = 0
for unique_prime in set(data):
    df['color']= np.where(df['prime'] == unique_prime, colors[counter])
    counter += 1

然后确保你没有用完预定义的颜色。您可以通过以下操作以较短的方式编写:

^{pr2}$

相关问题 更多 >

    热门问题