簡體   English   中英

使用python在數據幀中進行條件格式化

[英]conditional formatting in dataframe using python

我有一個pandas數據框,我需要根據指定的條件對其進行分類。 閾值是固定的,必須根據閾值的8種不同組合進行分類。

Threshold (A => 7, B = 3 or 4, C = between 22 - 27) 

我嘗試使用帶有條件操作的pandas對數據進行分類,但會產生誤導性結果。

條件是:

1. class1=f[(f['A']>7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
2. class2=f[(f['A']>7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
3. class3=f[(f['A']<7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
4. class4=f[(f['A']>7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
5. class5=f[(f['A']>7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
6. class6=f[(f['A']<7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
7. class7=f[(f['A']<7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
8. class8=f[(f['A']<7.0)|((f['B']!=3.0)&(f['B']!=4.0))| ((f['C']<=22.0)&(f['C']>=27.0))]

我需要根據條件對數據框中的所有行進行分類。

您的情況 :您的數據框名為f ,包含3列數字值。 這些列稱為'A''B''C'

我建議通過創建布爾列並將它們組合以匹配您的類來實現。 可能還有很多方法可以做到這一點,也有更優雅的方法。 我認為這個解決方案就像他們得到的一樣簡單。 基本上,您有三個條件可以滿足:

check_a = f['A'] >= 7
check_b = (f['B'] == 3) | (f['B'] == 4)
check_c = (22 <= f['C'] <= 27)

結合這3個檢查將構建你的8個案例( ~否定布爾值,所以基本上翻轉它們的值):

f['class_1'] =  check_a &  check_b &  check_c
f['class_2'] =  check_a &  check_b & ~check_c
f['class_3'] = ~check_a &  check_b &  check_c
f['class_4'] =  check_a & ~check_b &  check_c
f['class_5'] =  check_a & ~check_b & ~check_c
f['class_6'] = ~check_a &  check_b & ~check_c
f['class_7'] = ~check_a & ~check_b &  check_c
f['class_8'] = ~check_a & ~check_b & ~check_c

您的代碼不起作用的原因之一是您要檢查'C'列中的值是否小於22且大於27.這可能永遠不會成立。

暫無
暫無

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

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