我是 Python 新手。我正在嘗試在 for 回圈中創建多個列,但我遇到了麻煩。我有幾列,我正在嘗試創建一個新列來顯示 ohlcs 中的元素是否大于度量中的元素。我可以這樣做來創建一列,但我想節省時間,因為我計劃執行相同的功能但針對不同的變數。
ohlcs = ['open', 'high', 'low', 'close']
metrics = ['vwap', '9EMA', '20EMA']
wip = []
for idx, row in master_df.iterrows():
for ohlc in ohlcs:
for metric in metrics:
row[f'{ohlc} above {metric}'] = np.where(row[ohlc] >= row[metric], 1, 0)
這沒有做任何事情。我也這樣做了:
ohlcs = ['open', 'high', 'low', 'close']
metrics = ['vwap', '9EMA', '20EMA']
wip = []
for idx, row in master_df.iterrows():
for ohlc in ohlcs:
for metric in metrics:
if master_df[ohlc] >= master_df[metric]:
master_df[f'{ohlc} above {metric}'] = 1
else:
master_df[f'{ohlc} above {metric}'] = 0
這給了我一個錯誤。
ValueError:Series 的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我做了其他事情,但我在處理它時洗掉了這些。在這一點上,我沒有想法。請幫忙!
我現在明白了,但我手動檢查了值是否對齊,但不是。
在此處輸入影像描述
我如何解決它?
uj5u.com熱心網友回復:
無需遍歷資料框的行。這將為您提供所需的結果:
for ohlc in ohlcs:
for metric in metrics:
master_df[f'{ohlc} over {metric}'] = (master_df[ohlc] >= master_df[metric]).astype(int)
該部分astype(int)只是將Trueand轉換False為1and 0,如果您可以使用TrueandFalse表示,則可以使用 just master_df[f'{ohlc} over {metric}'] = master_df[ohlc] >= master_df[metric]。
編輯:當然,(master_df[ohlc] >= master_df[metric]).astype(int)相當于np.where(master_df[ohlc] >= master_df[metric], 1, 0),你可以使用任何一個。
uj5u.com熱心網友回復:
考慮所有成對可能性itertools.product的函式形式是一個更平坦的回圈:DataFrame.ge
from itertools import product
...
ohlcs = ['open', 'high', 'low', 'close']
metrics = ['vwap', '9EMA', '20EMA']
pairs = product(ohlcs, metrics)
for ohlc, metric in pairs:
master_df[f"{ohlc} over {metric}"] = master_df[ohlc].ge(master_df[metric])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468188.html
上一篇:GithubActions從awscli中隱藏URL
下一篇:numpy“插入”不插入任何東西
