web-dev-qa-db-ja.com

条件付きフォーマットPython pandas cell

セルの値に基づいてPython pandas DataFrameの色、ハイライト、または好みを変更しようとしています。たとえば、各行のセルが大きい場合その行の最初の列のセルよりも、セルを赤(または他の色)として強調表示します。それ以外の場合はそのままにします。

ここにforループを書きました:

for index in range(0, df.shape[0]):
    for column in range(1, df.shape[1]): # from 1 not from 0 because I only need # to compare the 2nd to the last cell of each row with the 1st cell in the row 

        if df.iloc[index][column] - df_BDE_n_months_avg_std_pct.iloc[index][0] > 0:
            then "PLEASE PUT YOUR HELP HERE, I NEED A PIECE OF CODE THAT CAN HIGHLIGHT THE CELL"
        else:
            "DO NOTHING"

これまでのところ、それを行う方法を見つけていません。どんな助けも素晴らしいでしょう。

7
thatMeow

から スタイルのドキュメント:

DataFrame.styleプロパティを使用して、条件付き書式を適用できます。これは、DataFrame.styleプロパティを使用して、データ内のデータに応じてDataFrameの視覚的なスタイルを設定します。

import pandas as pd
df = pd.DataFrame([[2,3,1], [3,2,2], [2,4,4]], columns=list("ABC"))

df.style.apply(lambda x: ["background: red" if v > x.iloc[0] else "" for v in x], axis = 1)

enter image description here


編集:特定のセルをフォーマットするには、Series.iteritems()で要素の名前を確認する条件チェッカーを追加するか、enumerate()でインデックスを確認します。 3列目からフォーマットする場合は、列挙を使用してインデックスを確認できます。

df = pd.DataFrame([[2,3,-3], [3,2,7], [2,4,4]], columns=list("ABC"))

df.style.apply(lambda x: ["background-color: #ff33aa" 
                          if (i >= 2 and (v > x.iloc[0] + x.iloc[1] 
                                          or v < x.iloc[0] - x.iloc[1])) 
                          else "" for i, v in enumerate(x)], axis = 1)

enter image description here

15
Psidom
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.Rand(4,3))
df.style.applymap(lambda x: 'background-color : yellow' if x>df.iloc[0,0] else '')

df

4
Zoe L