首页 > 解决方案 > 如果其他逻辑无法正常工作,熊猫

问题描述

我有一个这样的数据框,

ID   F/P     FTE Actual     FTE Calculated
1    F       100              100
2    F       110              110
3    P       90               100
4    P       90               90

我要生成结果列

如果 FTE Actual 不等于 FTE Calculated,则结果为 FALSE,我们不再检查。

如果为真,则查看 F/P 列,如果 F/P 列的值为 F,则 FTE_Calculated 应等于 100。

如果为真,则查看 F/P 列,如果 F/P 列的值为 P,则 FTE_Calculated 应小于 100。

ID   F/P     FTE Actual     FTE Calculated   Expected Result
1    F       100              100                 True
2    F       110              110                 False (as it is more than 100)
3    P       90               100                 False
4    P       90               90                  True

标签: pythonpandas

解决方案


如果有很多条件,最好的可读性是创建每个条件以分隔行,然后|按照&您的逻辑链接:

m1 = df['FTE Actual'] == df['FTE Calculated']
m2 = df['F/P'] == 'F'
m3 = df['FTE Calculated'] == 100
m4 = df['F/P'] == 'P'
m5 = df['FTE Calculated'] < 100

df['Expected Result'] = m1 & ((m4 & m5) | (m2 & m3))
print (df)
   ID F/P  FTE Actual  FTE Calculated  Expected Result
0   1   F         100             100             True
1   2   F         110             110            False
2   3   P          90             100            False
3   4   P          90              90             True

推荐阅读