我有以下数据帧,需要添加第三个布尔值为0或1的值,如果前两天的price
列为0.12,则列的值为1,否则为0
date price new_column
'2017-10-11' 0.13 0
'2017-10-12' 0.12 0
'2017-10-13' 0.12 0
'2017-10-14' 0.15 1
'2017-10-15' 0.13 0
'2017-10-16' 0.12 0
'2017-10-17' 0.12 0
'2017-10-18' 0.15 1
一个解决方案可以首先添加两个保留昨天价格和前天价格的列然后当这两个列都是0.12时new_column
将是1但我正在寻找更高效,更快速的解决方案而不需要添加太多额外的列
答案 0 :(得分:2)
比较shift
ed列并将boolean mask
投射到int
:
df['new'] = ((df['price'].shift(1) == 0.12) & (df['price'].shift(2) == 0.12)).astype(int)
print (df)
date price new_column new
0 '2017-10-11' 0.13 0 0
1 '2017-10-12' 0.12 0 0
2 '2017-10-13' 0.12 0 0
3 '2017-10-14' 0.15 1 1
4 '2017-10-15' 0.13 0 0
5 '2017-10-16' 0.12 0 0
6 '2017-10-17' 0.12 0 0
7 '2017-10-18' 0.15 1 1