熊猫如果其他逻辑不能正常工作

时间:2019-02-26 14:03:49

标签: python pandas

我有一个这样的数据框,

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

我要生成结果列

如果FTE实际值不等于FTE计算得出的值,则结果为FALSE,我们不再进行检查。

如果为true,则我们查看F / P列,如果F / P列的值为F,则FTE_Calculated应该等于100。

如果为true,则我们查看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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

Jezrael的解决方案是必经之路。如果您想了解如何对自己进行布尔索引,以下内容可能会有所帮助:

Logical operators for boolean indexing in Pandas

相关问题