我有以下数据框。 如何基于以下内容创建新列: 例如,如果19:24的行的diff <.1 并且19:21的行的差异小于.1 然后创建新列并将行设置为等于1
我知道如何使用if语句来完成这些操作,但是我一直坚持尝试使用熊猫(更有效)的解决方案。
open high low close diff
TimeStamp
2018-10-05 19:00:00 6637.90 6645.06 6637.17 6643.52 -0.057705
2018-10-05 19:03:00 6643.52 6650.00 6641.00 6649.99 0.002710
2018-10-05 19:06:00 6648.91 6650.00 6640.82 6642.85 -0.017769
2018-10-05 19:09:00 6642.85 6646.47 6642.00 6646.20 0.000000
2018-10-05 19:12:00 6646.20 6646.21 6642.00 6642.40 0.085065
2018-10-05 19:15:00 6641.00 6641.84 6636.35 6638.54 -0.024863
2018-10-05 19:18:00 6639.26 6643.38 6638.00 6640.00 -0.067340
2018-10-05 19:21:00 6642.49 6643.82 6642.47 6643.63 0.104931
2018-10-05 19:24:00 6643.78 6645.31 6635.50 6640.02 -0.031497
答案 0 :(得分:2)
您可以使用pd.Series.shift
和&
运算符来组合两个布尔序列。
这将为行{em>和上一行都满足条件的行上的flag = 1
的每个实例设置diff < 0.1
。
df['flag'] = (df['diff'].lt(0.1) & df['diff'].shift().lt(0.1)).astype(int)
可能更有效的方法是在单个比较中使用shift
:
s = df['diff'].lt(0.1)
df['flag'] = (s & s.shift()).astype(int)
结果:
print(df)
open high low close diff flag
TimeStamp
2018-10-05 19:00:00 6637.90 6645.06 6637.17 6643.52 -0.057705 0
2018-10-05 19:03:00 6643.52 6650.00 6641.00 6649.99 0.002710 1
2018-10-05 19:06:00 6648.91 6650.00 6640.82 6642.85 -0.017769 1
2018-10-05 19:09:00 6642.85 6646.47 6642.00 6646.20 0.000000 1
2018-10-05 19:12:00 6646.20 6646.21 6642.00 6642.40 0.085065 1
2018-10-05 19:15:00 6641.00 6641.84 6636.35 6638.54 -0.024863 1
2018-10-05 19:18:00 6639.26 6643.38 6638.00 6640.00 -0.067340 1
2018-10-05 19:21:00 6642.49 6643.82 6642.47 6643.63 0.104931 0
2018-10-05 19:24:00 6643.78 6645.31 6635.50 6640.02 -0.031497 0