python - 如何简化代码以检查 pandas 中的范围

标签 python python-3.x pandas dataframe if-statement

列为L、W、H、D,每列的范围从10到100,如果超过这个则为失败,否则为通过

我怎样才能简化这段代码。我尝试使用失败的 if 条件

def Target(FM):

     if (df['L'] < 10 or df['L'] > 120):
        return 'L-Fail'
     else:
        return 'Pass'


     elif (df['W'] < 10 or df['W'] > 120):
        return 'W-Fail'
     else:
        return 'Pass'


     elif (df['H'] < 10 or df['H'] > 120):
        return 'H-Fail'
     else:
        return 'Pass'


     elif(df['D'] < 10 or df['D'] > 120):
        return 'D-Fail'
     else:
        return 'Pass'


     df['Remarks_Target'] = df.apply(Target, axis = 1)

      L       W       H       D     Remarks

      1       20      30      40    L-Fail
      10      40      0       50    Pass
      15      30      30      60    Pass
      60      90      80      300   D-Fail
      50      30      30      120   Pass
      10      10      120     120   Pass
      30      20      9       80    H-Fail
      14      5       85      34    W-Fail

最佳答案

循环每列并通过 Series.between 设置新值, 不匹配数据的最后缺失值替换为 Series.fillna :

for c in ['L','W','H','D']:
    m = df[c].between(10, 120, inclusive=True)
    df.loc[~m, 'Remarks_Target'] = f'{c}-Fail'

df['Remarks_Target'] = df['Remarks_Target'].fillna('Pass')
print (df)
    L   W    H    D Remarks Remarks_Target
0   1  20   30   40  L-Fail         L-Fail
1  10  40    0   50  H-Fail         H-Fail
2  15  30   30   60    Pass           Pass
3  60  90   80  300  D-Fail         D-Fail
4  50   0   30  120  W-Fail         W-Fail
5  10  10  120  120    Pass           Pass

类似的选择:

df['Remarks_Target'] = 'Pass'
for c in ['L','W','H','D']:
    m = df[c].between(10, 120, inclusive=True)
    df.loc[~m, 'Remarks_Target'] = f'{c}-Fail'

关于python - 如何简化代码以检查 pandas 中的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553084/

相关文章:

python - 考虑基线值,根据具体条件减去和添加值

python - Numpy 旋转矩阵乘法

mongodb - 使用 pymongo 的 MongoDB 的 dateFromString 运算符的问题

python - Django 休息框架 : Correct way to serialize ListFields

python - 将图形嵌入 GUI(Qtdesigner 和 Pyside)

python - 是否有一种计算效率更高的方法来使用 Pandas 查找与正则表达式匹配的第一个匹配项?

python - 数据框的行或列中的值返回 true 或 false

python - numpy.argmax 比 MATLAB [~,idx] = max() 慢吗?

python - 不同的单位和数据结构的设计

python - 如何更改 Jupyter notebook 中的标记单元格字体颜色