繁体   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