根据python中另一列值的顺序设置dataframe中列的值

根据python中另一列值的顺序设置dataframe中列的值,python,pandas,Python,Pandas,我的数据框架如下所示: df={'NAME':['a','b','c','d','e'],'COUNT':[25,23,14,19,2]} pd.DataFrame(df,columns=['NAME','COUNT']) 我想根据“COUNT”列值设置列“color”的值,这些列值是有序的,也可能不是有序的 颜色的前四个值应设置为第四个最大行值,其他行应填充“rgb(226230189)”。但正努力设置这种格式。我是python新手,我尝试过使用“apply”函数,但是如何在apply中

我的数据框架如下所示:

df={'NAME':['a','b','c','d','e'],'COUNT':[25,23,14,19,2]}
pd.DataFrame(df,columns=['NAME','COUNT'])

我想根据“COUNT”列值设置列“color”的值,这些列值是有序的,也可能不是有序的

颜色的前四个值应设置为第四个最大行值,其他行应填充
“rgb(226230189)”
。但正努力设置这种格式。我是python新手,我尝试过使用“apply”函数,但是如何在apply中找到第n个最大值呢

df['color']=df.apply(lambda row:"rgb(211, 63, 106)"  if row.COUNT.max() else "rgb(226, 230, 189)")

首先,我们用颜色列表中的前四个值创建一个前四个值的字典,然后将它们映射到数据框,并用目标值填充任何空白值

colors = ["rgb(211, 63, 106)","rgb(233, 154, 44)","rgb(232, 195, 60)","rgb(226, 230, 189)"]
map_colors = dict(zip(
            df.sort_values('COUNT',ascending=False).iloc[:4]['COUNT'].values,
            colors)
                )



首先,我们用颜色列表中的前四个值创建一个前四个值的字典,然后将它们映射到数据框,并用目标值填充任何空白值

colors = ["rgb(211, 63, 106)","rgb(233, 154, 44)","rgb(232, 195, 60)","rgb(226, 230, 189)"]
map_colors = dict(zip(
            df.sort_values('COUNT',ascending=False).iloc[:4]['COUNT'].values,
            colors)
                )



你介意多解释一下你的意图吗?你介意多解释一下你的意图吗?
print(map_colors)

{25: 'rgb(211, 63, 106)',
 23: 'rgb(233, 154, 44)',
 19: 'rgb(232, 195, 60)',
 14: 'rgb(226, 230, 189)'}
df['Colors'] = df['COUNT'].map(map_colors).fillna('rgb(226, 230, 189)')


  NAME  COUNT              Colors
0    a     25   rgb(211, 63, 106)
1    b     23   rgb(233, 154, 44)
2    c     14  rgb(226, 230, 189)
3    d     19   rgb(232, 195, 60)
4    e      2  rgb(226, 230, 189)