新的数据帧取决于Python中先前行的多个条件

新的数据帧取决于Python中先前行的多个条件,python,pandas,Python,Pandas,我有一个列a和b的数据框,如下所示: a b date 2017-06-05 1.1285 1.1110 2017-06-06 1.1285 1.1165 2017-06-07 1.1285 1.1202 2017-06-08 1.1285 1.1195 2017-06-09 1.1285 1.1166 2017-06-12 1.1285 1.1166 2017-06-13 1.1

我有一个列a和b的数据框,如下所示:

                 a       b
date                      
2017-06-05  1.1285  1.1110
2017-06-06  1.1285  1.1165
2017-06-07  1.1285  1.1202
2017-06-08  1.1285  1.1195
2017-06-09  1.1285  1.1166
2017-06-12  1.1285  1.1166
2017-06-13  1.1285  1.1166
**2017-06-14  1.1296  1.1166**
2017-06-15  1.1296  1.1167
2017-06-16  1.1296  1.1170
**2017-06-19  1.1296  1.1132**
2017-06-20  1.1296  1.1119
2017-06-21  1.1296  1.1119
2017-06-22  1.1296  1.1119
2017-06-23  1.1296  1.1119
2017-06-26  1.1296  1.1119
2017-06-27  1.1349  1.1128
2017-06-28  1.1391  1.1139
2017-06-29  1.1445  1.1145
2017-06-30  1.1445  1.1172
我想根据以下条件为行生成一个返回值为1的新列c:

condition 1: df['a'] > df['a'].shift(1) #i.e. an increase of value of a; OR
condition 2: df['b'] >= df['b'].shift(1) #i.e. value of b stays the same or increases after condition 1 happens. 
在上面的示例中,这意味着我希望c列在2017-06-14上显示值1(因为该行a的值增加),并在2017-06-19之前一直显示值1(因为b的值在该行下降,并且在2017-06-14和2017-06-16之间,c列的值应显示为1,因为b的值在2017-06-14 a列的值增加后没有下降。)

我花时间研究了np.where()函数,但似乎不容易实现上述逻辑,因为逻辑本身也取决于逻辑的结果

谢谢你的回答

---------------附加-------------------------- 为了回答john的后续问题,让我用更清晰的输入和预期的答案重新编写示例(请忽略上述数据集):


日期a.diff b.diff c
0 2017-06-05 0.0 0.0 0 1 2017-06-06 0.0 1.0 0 2 2017-06-07 0.0 1.0 0 3 2017-06-08 0.0 -1.0 0 4 2017-06-09 0.0 -1.0 0 5 2017-06-12 0.0 0.0 0 6 2017-06-13 0.0 0.0 0 7 2017-06-14 1.0 0.0 1 8 2017-06-15 0.0 0.0 1 9 2017-06-16 0.0 0.0 1 10 2017-06-19 0.0 0.0 1 11 2017-06-20 0.0 -1.0 0 12 2017-06-21 0.0 0.0 0 13 2017-06-22 0.0 0.0 0 14 2017-06-23 0.0 0.0 0 15 2017-06-26 0.0 0.0 0 16 2017-06-27 1.0 1.0 1 17 2017-06-28 1.0 1.0 1 18 2017-06-29 1.0 1.0 1 19 2017-06-30 0.0 1.0 1 20 2017-07-31 0.0 -1.0 0

您也可以使用
diff

In [1185]: df['c'] = ((df.a.diff() > 0) | (df.b.diff() >= 0)).astype(int)

In [1186]: df
Out[1186]:
                 a       b  c
date
2017-06-05  1.1285  1.1110  0
2017-06-06  1.1285  1.1165  1
2017-06-07  1.1285  1.1202  1
2017-06-08  1.1285  1.1195  0
2017-06-09  1.1285  1.1166  0
2017-06-12  1.1285  1.1166  1
2017-06-13  1.1285  1.1166  1
2017-06-14  1.1296  1.1166  1
2017-06-15  1.1296  1.1167  1
2017-06-16  1.1296  1.1170  1
2017-06-19  1.1296  1.1132  0
2017-06-20  1.1296  1.1119  0
2017-06-21  1.1296  1.1119  1
2017-06-22  1.1296  1.1119  1
2017-06-23  1.1296  1.1119  1
2017-06-26  1.1296  1.1119  1
2017-06-27  1.1349  1.1128  1
2017-06-28  1.1391  1.1139  1
2017-06-29  1.1445  1.1145  1
2017-06-30  1.1445  1.1172  1

首先,我为没有很好地表达而深表歉意。如果:条件A(df.A.diff()>0&df.b.diff()>0)或条件b(条件b后的df.b.diff()>0为真,只要条件A仍然为真),则c列应显示值1为true。如果条件B为false。则只有当条件A为true时,列C的值才能为1。根据上述逻辑,
2017-06-12 1.1285 1.1166 1 2017-06-13 1.1285 1.1166 1
这两行的列C应为零,因为2017-06-08上的B减小(条件B为false)。2017-06-09及以后的版本仅取决于条件A。我刚刚用干净的修订数据集和预期输出更新了我的问题。感谢您的耐心,因为我是stackoverflow的新用户。