我的数据框如下所示:

 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

10-08 04:32