首页 > 解决方案 > Pandas 中的许多 If 语句

问题描述

我有一个股票数据框。并且有许多if语句要运行来赋值。

c1 = np.where((blackCondition & whitePCondition) & (close_gt_oP & open_ge_cP),'UP',None)
c2 = np.where((blackCondition & whitePCondition) & (open_lt_cP & close_le_oP),'DOWN',None)

c3 = np.where((blackCondition & whitePCondition) & (close_gt_oP & open_lt_cP),'OUTSIDE',None)
c4 = np.where((blackCondition & whitePCondition) & (close_le_oP & open_ge_cP),'INSIDE',None)
#IF2
c5 = np.where((blackCondition & blackPCondition) & (open_gt_oP & close_ge_cP),'UP',None)
c6 = np.where((blackCondition & blackPCondition) & (close_lt_cP & open_le_oP),'DOWN',None)

c7 = np.where((blackCondition & blackPCondition) & (open_gt_oP & close_lt_cP),'OUTSIDE',None)
c8 = np.where((blackCondition & blackPCondition) & (open_le_oP & close_ge_cP),'INSIDE',None)
#IF3

c9 = np.where((whiteCondition & whitePCondition) & (close_gt_cP & open_ge_oP),'UP',None)
c10 = np.where((whiteCondition & whitePCondition) & (open_lt_oP & close_le_cP),'DOWN',None)

c11 = np.where((whiteCondition & whitePCondition) & (close_gt_cP & open_lt_oP),'OUTSIDE',None)
c12 = np.where((whiteCondition & whitePCondition) & (close_le_cP & open_ge_oP),'INSIDE',None)
#IF4
c13 = np.where((whiteCondition & blackPCondition) & (open_gt_cP & close_ge_oP),'UP',None)
c14 = np.where((whiteCondition & blackPCondition) & (close_lt_oP & open_le_cP),'DOWN',None)

c15 = np.where((whiteCondition & blackPCondition) & (open_gt_cP & close_lt_oP),'OUTSIDE',None)
c16 = np.where((whiteCondition & blackPCondition) & (open_le_cP & close_ge_oP),'INSIDE',None)

如何将语句的 TRUE VALUE 分配给列?

df['pos'] = 如果此陈述中的任何一个为真

前任:

if(c1) => df['pos'] = TRUE_CONDITION_OF_C1

标签: pythonpandasdataframe

解决方案


对于 pandas,我不知道这样做的一种非常优雅的方式。不过有几种选择。

您可以重复使用.loc[]掩码,这很难看,或者您可以使用.map()or.apply()方法。

以下示例假定掩码无处为空,并且与 df 本身具有相同的形状。

df['pos'] = (
    (blackCondition & whitePCondition)
    & (close_gt_oP & open_ge_cP)
).map({True: "UP", False: "DOWN"})

那只会做第一行。


推荐阅读