[英]Python Pandas: Compare values of two dataframes with different columns names by ID or row
[英]Python Pandas - Compared a value in a row to two different values from two different columns in previous row
所以我有一個 dataframe df:
Date High Low Open
2/5/21 100 10 50
3/5/21 110 5 65
4/5/21 220 180 200
我想使用 if 語句查看當天的開盤價是否在前一天的范圍內。 我想使用 if 語句,因為我將來可能想添加更多條件。
我嘗試創建一個 function:
def openloc(row):
if row['Open'] <= row['High'].shift(-1) & row['Open'] >= row['Low'].shift(-1):
return 'Yes'
df['inrange?'] = df.apply(openloc, axis = 1)
但我不斷收到錯誤消息:'float' object has no attribute 'shift'
有一個更好的方法嗎?
我設計的 output 將是這樣的:
Date High Low Open Inrange?
2/5/21 100 10 50 nan
3/5/21 110 5 65 yes
4/5/21 220 180 200 no
我不想返回 boolean 因為最終我可能想要添加比是或否更多的信息
您可以使用between
和shift
使用向量化操作,無需應用:
df.assign(Inrange = df.Open.between(df.Low.shift(-1), df.High.shift(-1))
.shift()
.map({True:'Yes', False:'No'}))
Date High Low Open Inrange
0 2/5/21 100 10 50 NaN
1 3/5/21 110 5 65 Yes
2 4/5/21 220 180 200 No
一個np.where選項:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Date': ['2/5/21', '3/5/21', '4/5/21'],
'High': [100, 110, 220],
'Low': [10, 5, 180],
'Open': [50, 65, 200]})
m = df['Open'].between(df['Low'].shift(-1), df['High'].shift(-1))
df['inrange?'] = np.where(m, 'Yes', 'No')
df['inrange?'] = df['inrange?'].shift()
print(df)
Date High Low Open inrange?
0 2/5/21 100 10 50 NaN
1 3/5/21 110 5 65 Yes
2 4/5/21 220 180 200 No
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.