繁体   English   中英

在 python pandas 中应用样式后,如何删除和重新排序(重新索引)列?

[英]How do I remove and re-sort (reindex) columns after applying style in python pandas?

在 python pandas 中应用样式后,有没有办法删除列或行? 并重新排序?

styled = df.style.apply(colorize, axis=None)
#remove _x columns
yonly = list(sorted(set(styled.columns) - set(df.filter(regex='_x$').columns)))
###Remove columns that end with "_x" here
styled.to_excel('styled.xlsx', engine='openpyxl', freeze_panes=(1,1))

我尝试过的大多数东西都不可用,即styled.reindex(columns=yonly)返回AttributeError: 'Styler' object has no attribute 'reindex'

styled.columns = yonly返回AttributeError: 'list' object has no attribute 'get_indexer'

styled = styled[yonly]返回TypeError: 'Styler' object is not subscriptable

从不匹配的两列中的颜色特定单元格跟进,使用 python pandas style.where(或其他方式)并导出到 excel

@jezrael在样式和着色之前删除列的评论之后,我得到了答案:)

解决方案是传递一个额外的参数,使原始数据帧df可用。 df_tmp使用“_y”为数据df_tmp着色。 :)

df = pd.DataFrame({
    'config_dummy1': ["dummytext"] * 10,
    'a_y': ["a"] * 10,
    'config_size_x': ["textstring"] * 10,
    'config_size_y': ["textstring"] * 10,
    'config_dummy2': ["dummytext"] * 10,
    'a_x': ["a"] * 10
})
df.at[5, 'config_size_x'] = "xandydontmatch"
df.at[9, 'config_size_y'] = "xandydontmatch"
df.at[0, 'a_x'] = "xandydontmatch"
df.at[3, 'a_y'] = "xandydontmatch"
print(df)

def color(x, extra):
    c1 = 'color: #ffffff; background-color: #ba3018'
    df1 = pd.DataFrame('', index=x.index, columns=x.columns)

    #select only columns ends with _x and _y and sorting
    cols = sorted(extra.filter(regex='_x$|_y$').columns)
    #loop by pairs and assign style by mask
    for colx, coly in zip(cols[::2],cols[1::2]):
        #pairs columns 
        m = extra[colx] != extra[coly]
        df1.loc[m, [coly]] = c1
    return df1

yonly = list(sorted(set(df.columns) - set(df.filter(regex='_x$').columns)))
df_tmp = df[yonly]
df_tmp.style.apply(color, axis=None, extra=df).to_excel('styled.xlsx', engine='openpyxl')

谢谢SO的好人! :D

我不确定重新排序,但如果您只想删除(隐藏)某些列,请使用 Styler
hide_columns方法。

例如隐藏列“A”和“B”:

hide_columns(['A', 'B'])

我有一个类似的场景,其中我必须根据另一个数据框为数据框的背景着色。 我创建了一个基于其他数据框范围的着色函数,如下所示:

def colval(val, z1):
    color= 'None'
    df1= pd.DataFrame('', index= val.index, columns= val.columns) # dataframe for coloring
    colm= z1.shape
    
    for x in list(range(colm[0])):
        for y in list(range(1, colm[1])):
# check the range in the dependent dataframe
# and color the other one
             if(z1.iloc[x, y]>= 4.5): 
                df1.iloc[x, y]= 'background-color: red'
             elif(z1.iloc[x, y]<= -4.5):
                df1.iloc[x, y]= 'background-color: yellow'      
    return df1
df_tocol.style.apply(colval, axis= None, z1= diff_df)

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM