簡體   English   中英

Pandas 樣式:條件格式

[英]Pandas Styling: Conditional Formatting

我將以下格式應用於 pandas 數據框。

數據如下:

{'In / Out': {'AAA': 'Out',
  'BBB': 'In',
  'Total1': 'Out',
  'CCC': 'In',
  'DDD': 'In',
  'Total2': 'In'},
 'Mln': {'AAA': '$-1,707',
  'BBB': '$1,200',
  'Total1': '$-507',
  'CCC': '$245',
  'DDD': '$1,353',
  'Total2': '$1,598'},
 'US$ Mln': {'AAA': '$-258',
  'BBB': '$181',
  'Total1': '$-77',
  'CCC': '$32',
  'DDD': '$175',
  'Total2': '$206'}}

  • 首先,我試圖將整個第三行和第六行加粗。 我已經得到一個錯誤。
  • 其次,我希望當第二列 == In 時第二、第三和第四列為綠色,如果第二列 == Out 則為紅色。 我該怎么做呢?
  • 第三,我希望只有文本“Total1”和“Total2”(不是整列)右對齊,同一列中的其他文本可以保持左對齊。

有人可以告訴我如何編寫代碼嗎?

您必須根據.loc使用pd.IndexSlice

像這樣。

idx = pd.IndexSlice[['Total1', 'Total2'], :]
# If you don't want to hard-code use this
idx = pd.IndexSlice[df.index[[2, 5]], :]

根據需要制作樣式功能。

# 1
def make_bold(val):
    return 'font-weight: bold'
# For italic use 'font-style: italic'
# 2
def apply_color(s):
    if s.isin(['In']).any():
        return ['color: green' for val in s]
    return ['color: red' for val in s]

您將df.style.applymap用於元素方式, df.style.apply用於列/行方式。

s = df.style.applymap(
    make_bold, subset=pd.IndexSlice[["Total1", "Total2"], :] # subset=idx
).apply(apply_color, axis=1)
s

Output:

在此處輸入圖像描述


對於#3

不能indexcolumns上應用樣式另外,根據pandas style-docs ,在Limitations部分,

您只能設置值的樣式,而不能設置索引或列的樣式

讓我們嘗試apply axis=1

df.style.apply(lambda x: ['color:red' if x['In / Out']=='Out' 
                           else 'color:green']*len(x), axis=1)

Output:

df.style.apply(lambda x: ['color:red' if x['In / Out']=='Out' else 'color:green']*len(x), axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM