簡體   English   中英

Dataframe - 對於每一行,比較兩列的值,匹配時獲取第三列的值

[英]Dataframe - for each row, compare values of two columns, get value of third column on match

我在 Python 中有一個 pandas dataframe,其中包含按股票代碼排列的不同股票列表,對於每只股票,它還記錄了當前價格以及低價和高價警報閾值。

下面顯示了 dataframe 的示例:

股票代碼 當前價格($) 警報價格高 ($) 警報低價 ($)
亞馬遜 114 180 105
應用程序 140 110 190
微軟公司 235 340 210

注意:我已排除上面的 pandas 索引列,因為此 integer 可以針對相同的 TICKER 股票進行更改,具體取決於它們在 API 請求中隨機返回的順序。

對於 dataframe 中的每一行,我想測試 ['CURRENT PRICE ($)'] 是否高於 ['ALERT PRICE HIGH ($)'] 或低於 ['ALERT PRICE LOW (£)']。

如果條件為真,我想將“TICKER”ID 傳遞給打印聲明,通知已達到價格警報。

在偽代碼中,它將遵循以下幾行:

for each row in df:
    if CURRENT PRICE($) > ALERT PRICE HIGH ($)
        print('High Price Alert for' + TICKER)
    if CURRENT PRICE($) < ALERT PRICE LOW ($)
        print('Low Price Alert for:' + TICKER)

作為數據幀的新手,我不確定如何將其轉換為實現我的目標的代碼,或者以這種方式遍歷 dataframe 是否是最好的方法。 希望有人能幫忙。

您可以遍歷 dataframe,但應盡可能使用矢量化代碼。 就您而言,我懷疑這兩種方法是否有所作為。

我會這樣做:

# high_ and low_alert are series to True/False values
high_alert = df["CURRENT PRICE($)"] > df["ALERT PRICE HIGH ($)"]
low_alert = df["CURRENT PRICE($)"] < df["ALERT PRICE LOW ($)"]

# df.loc[high_alert, "TICKER"] get rows where `high_alert == True`
# and extract the TICKER column.
# Likewise for df.loc[low_alert, "TICKER"]
print("High Prices Alert for: " + " ".join(df.loc[high_alert, "TICKER"]))
print("Low Prices Alert for: " + " ".join(df.loc[low_alert, "TICKER"]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM