我的数据框如下所示:
price High_cross
0.00224311 False
0.00224473 False
0.00224422 False
0.00224697 True
0.00224899 True
0.00224668 True
0.00224967 True
0.00224967 True
0.00224983 True
0.00225143 False
我需要做的是在
High_cross
列上循环,当存在True
时,选择相关的price
并将其与该系列的最后一个price
进行比较。如果第一个价格低于第二个价格,请在True
的新列movement
中通知它。在这个例子中,它应该看起来像这样: price High_cross Movement
0.00224311 False
0.00224473 False
0.00224422 False
0.00224697 True True
0.00224899 True
0.00224668 True
0.00224967 True
0.00224967 True
0.00224983 True
0.00225143 False
(因为0.00224983大于0.00224697)!
我尝试使用索引,但相对而言卡住了...任何解决方案/想法?谢谢
最佳答案
考虑以下df:
price High_cross
0 0.002243 False
1 0.002245 False
2 0.002244 False
3 0.002247 True
4 0.002249 True
5 0.002247 True
6 0.002250 True
7 0.002250 True
8 0.002250 True
9 0.002251 False
10 0.002251 True
11 0.002250 True
使用:
df['identifier']=(df.High_cross.ne(df.High_cross.shift())).cumsum()
df['Movement']=df[df.High_cross].groupby('identifier')['price'].\
transform(lambda x: x.iloc[0]<x.iloc[-1])
print(df.drop('identifier',1))
price High_cross Movement
0 0.002243 False NaN
1 0.002245 False NaN
2 0.002244 False NaN
3 0.002247 True True
4 0.002249 True True
5 0.002247 True True
6 0.002250 True True
7 0.002250 True True
8 0.002250 True True
9 0.002251 False NaN
10 0.002251 True False
11 0.002250 True False