使用列表推导式比较pandas DataFrame同行列r1与r2的值并修复全返回yellow问题
问题原因
numpy.nan参与任意数值比较运算的结果都为False,因此你原代码中的判断条件永远不触发red分支,所有行都返回yellow。
列表推导式修改方案
仅需要在判断条件中新增非空校验,确保两个值都为有效值时再做大小比较即可,修改后的代码如下:
import pandas as pd import numpy as np from numpy import nan time_idx = pd.date_range('2021-01-05', periods=8, freq='3H') r1 = np.concatenate([[nan,nan,nan],235,324,125,[nan,nan]], axis=None) r2 = np.concatenate([114,nan,345,235,nan,125,178,324], axis=None) df_r = pd.DataFrame({'r1': r1,'r2':r2},index = time_idx) # 修改列表推导式的判断条件 df_r["Light"]=['red' if pd.notna(df_r.loc[t,'r1']) and pd.notna(df_r.loc[t,'r2']) and df_r.loc[t,'r1'] > df_r.loc[t,'r2'] else 'yellow' for t in df_r.index] print(df_r)
你提供的测试用例中不存在r1、r2均为有效值且r1 > r2的场景,因此测试运行后Light列仍全为yellow,可自行调整测试数据验证逻辑正确性。
内容的提问来源于stack exchange,提问作者lijch
相关产品推荐
相关产品推荐

