使用python在dataframe中进行条件格式化

时间:2019-04-03 05:57:29

标签: python pandas conditional-formatting

我有一个熊猫数据框,我需要根据指定的条件对其进行分类。阈值是固定的,必须根据阈值的8种不同组合进行分类。

prbs_match_out <= ch0_prbs_match_int & ch1_prbs_match_int;

我尝试将熊猫与条件操作结合使用来对数据进行分类,但是会产生误导性的结果。

条件是:

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

我需要根据条件对数据框中的所有行进行分类。

1 个答案:

答案 0 :(得分: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。这永远不可能成立。