gpt4 book ai didi

python - Pandas :根据两个不同的列条件选择值价格

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:17 25 4
gpt4 key购买 nike

我的数据框是这样的:

 price      direction   event           High_cross  movement
-------------------------------------------------------------
0.00225246 down 0 False False
0.00225506 up crossing up False False
0.00225347 up 0 False False
0.00225345 up 0 False False
0.00225613 up 0 True movement
0.00225506 up 0 True True
0.00225345 up 0 False movement
0.00225235 down 0 False False
0.00224500 down crossing down False False
0.00225266 down 0 False False
0.00225246 up crossing up False False
0.00225506 up 0 False False
0.00225506 down crossing down False False

这是一个相对复杂的请求。当 event 列中有 crossing up 时,选择列的 High_cross 值为 True 的价格,然后movementmovement 并将其与 crossing down 之前的价格行进行比较。如果第一个价格小于第二个价格,则在新列中使用 True 语句通知它。我不知道如何开始!有什么帮助吗?如果您需要说明,请告诉我...谢谢

小修正,如果一个crossing up和一个crossing down之间没有movement,计算不应该完成!谢谢

在上面的示例中它将是:选择行

price       direction   event   High_cross  movement
----------------------------------------------------
0.00225613 up 0 True movement

因为 High_cross 列是 True 并且 movement 具有值 movement,从这一行取价格 0.00225613 并将其与 crossing down 事件正上方一行的价格进行比较,因此 0.00225235

它应该像这样存储结果:

 price      direction   event           High_cross  movement  triggered
----------------------------------------------------------------------
0.00225246 down 0 False False
0.00225506 up crossing up False False
0.00225347 up 0 False False
0.00225345 up 0 False False
0.00225613 up 0 True movement
0.00225506 up 0 True True
0.00225345 up 0 False movement
0.00225235 down 0 False False
0.00224500 down crossing down False False True
0.00225266 down 0 False False
0.00225246 up crossing up False False
0.00225506 up 0 False False
0.00225506 down crossing down False False

最佳答案

更新

通过问题更新改进

import pandas as pd

pd.set_option('precision', 8) # To see all decimals

df = pd.DataFrame({
"price":[0.00225246,0.00225506,0.00225347,0.00225345,0.00225613,0.00225506,0.00225345,0.00225235,0.00224500,0.00225266,0.00225246,0.00225506,0.00225506],
"direction":["down","up","up","up","up","up","up","down","down","down","up","up","down"],
"event": [0,"crossing up",0,0,0,0,0,0,"crossing down",0,"crossing up",0,"crossing down"],
"High_cross": [False,False,False,False,True,True,False,False,False,False,False,False,False],
"movement": [False,False,False,False,"movement",True,"movement",False,False,False,False,False,False]
})

# Add result column
df['triggered'] = "No"

pre_row = []
match_price = None
match_price_2 = None
matched = False
start_search = False
for index,row in df.iterrows():
if index == 0:
pre_row = row
continue
if row["event"] == 'crossing up':
start_search = True
if start_search and row["High_cross"] == True and row["movement"] == 'movement':
match_price = row["price"]
matched = True
if matched and row["event"] == 'crossing down':
match_price_2 = pre_row["price"]
#Only update when condition it's true
if (match_price < match_price_2) == False:
df.at[index, 'triggered'] = result
matched = False
start_search = False
pre_row = row

print(df)

输出

          price direction          event  High_cross  movement  triggered
------------------------------------------------------------------------
0 0.00225246 down 0 False False No
1 0.00225506 up crossing up False False No
2 0.00225347 up 0 False False No
3 0.00225345 up 0 False False No
4 0.00225613 up 0 True movement No
5 0.00225506 up 0 True True No
6 0.00225345 up 0 False movement No
7 0.00225235 down 0 False False No
8 0.00224500 down crossing down False False Yes
9 0.00225266 down 0 False False No
10 0.00225246 up crossing up False False No
11 0.00225506 up 0 False False No
12 0.00225506 down crossing down False False No

关于python - Pandas :根据两个不同的列条件选择值价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54812841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com