将多个样式应用于数据框特定列

我认为这可能是一个复杂的问题。我想为特定列设置五种不同的颜色。数据框中的 cld_ght。这是数据框:


    icao msg_type              time    dt  ddd  ff    gg flt_cat   vis  cld_hgt cld_type present_wx vis_obc

0   KLAX  ROUTINE  2019-10-14 00:53  1:00  260  10 -9999     VFR  10.0     9999     9999       None   -9999

1   KLAX  ROUTINE  2019-10-14 01:53  1:00  240   9 -9999     VFR  10.0     9999     9999       None   -9999

2   KLAX  ROUTINE  2019-10-14 02:53  1:00  260   6 -9999     VFR  10.0     9999     9999       None   -9999

3   KLAX  ROUTINE  2019-10-14 03:53  1:00  250   5 -9999     VFR  10.0     9999     9999       None   -9999

4   KLAX  ROUTINE  2019-10-14 04:53  1:00  240   4 -9999     VFR  10.0     9999     9999       None   -9999

5   KLAX  ROUTINE  2019-10-14 05:53  1:00  250   5 -9999     VFR  10.0     9999     9999       None   -9999

我开发了这样的代码:


def cloud_height_style_function(val): 

    VFR_condition = val>3000

    MVFR_condition = 1000<=val<=3000

    IFR_condition = 500<=val<1000

    LIFR_condition = 200<=val<500

    VLIFR_condition = val<200

   results = [] 

    for val00,val01,val02,val03,val04 in zip(VFR_condition,MVFR_condition,IFR_condition,LIFR_condition,VLIFR_condition):

        if val00:

            color = '#00b050'

        elif val01:

            color = '#FFFF00'

        elif val02:

            color = '#FF0000'

        elif val03:

            color = '#FFA500'

        elif val04:

            color = '#9400D3'

        results.append(f"color : {color}") 

    return(results)  



highlighted=df.style.apply(cloud_height_style_function,subset=['cld_hgt']).render()


with open('myhtml.html','w') as f:

     f.write(highlighted)    

我收到这个错误


 ValueError: ('The truth value of a Series is ambiguous. Use a.empty,a.bool(), a.item(), a.any() or a.all().', 'occurred at index cld_hgt')

我不确定我做对了


所以你会像这样分开吗


def cloud_height_style_function(val): 

    VFR_condition = val>3000

    MVFR_condition = 1000<=val<=3000

    IFR_condition = 500<=val<1000

    LIFR_condition = 200<=val<500

    VLIFR_condition = val<200

   results = [] 


如果我这样做,我需要添加多个结果数组。你会把它分成不同的功能吗?


九州编程
浏览 85回答 1
1回答

米脂

我认为你可以这样做pd.cut:def cloud_height_style_function(vals):&nbsp;&nbsp; &nbsp; return pd.cut(vals,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [-np.inf,200,500,1000,3000, np.inf], # need to review the bin a bit&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labels=[f'color: {c}' for c in ['#9400D3','#FFA500','#FF0000','#FFFF00','#00b050']]&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)df.style.apply(cloud_height_style_function,subset=['cld_hgt'])输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python