2016-12-17 25 views
1

セルの値に基づいてPython pandas DataFrameを色付け、強調表示、または変更しようとしています。例えば各行のセルがその行の最初の列のセルより大きい場合は、セルを赤(または他の色)としてハイライトし、それ以外の場合はそのままにします。条件付きでフォーマットするPython pandas cell

私はここでループのために書いた:

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" 

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

答えて

3

the style docs:からあなたはDataFrame.style プロパティを使用して、条件付き書式、内のデータに応じて、 データフレームの視覚的なスタイリングを、適用することができます。

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

+0

おかげPsidomは!あなたのソリューションは素晴らしいです!アドオンの質問ですので、x> 1番目のセル+ 2番目のセル、またはx <1番目のセル - 2番目のセルの場合、3番目のセルxから各行のルールを設定する場合はどうしたらいいですか?ここでのポイントは、私が比較したい細胞の範囲をどのように選ぶかということです。最初のセル自体は自動的に除外されるため、それ自体は大きくはなりませんが、他のルールを適用するともう少し複雑になります。 – thatMeow

+0

各行を列挙してインデックスを調べることができます。インデックスが*> = 2 *の場合にのみセルを修正します。アップデートを参照してください。 – Psidom

+0

もう一度感謝します。私はまだパンダではあまりプレイしていないし、あなたの提案は非常に貴重です。私はあなたの時間を感謝します:) – thatMeow

関連する問題