Python 和 Pandas 的相對新手,最終承認自己無法弄清楚這一點。我有一個來自我們的能源供應商 API 的 pandas 資料框,每行是 30 分鐘的間隔,以 p/kWH 'value_exc_vat' 顯示批發能源成本,房屋的太陽能輸出 'export' 和日期時間戳 'datetime'。
| index |'value_exc_vat'|'datetime'|'export'|'hour'|'export_rate'|'export_rate_var'|
“小時”取自每一行的日期時間,例如 13、14、15、16 等。
要計算我們支付的價格/千瓦時,我需要計算
0.97 x 'value_exc_vat' peak_rate_uplift
peak_rate_uplift 僅適用于 16:19(含)時段
我已經嘗試了幾乎所有我能想到的方法,但我無法讓它發揮作用。
peak_rate = [16,17,18,19]
for hour in df['hour']:
if hour == peak_rate:
df['export_rate_var'] = (df['export_rate'] peak_rate_uplift)
else:
df['export_rate_var'] = df['export_rate']
從 if 函式列印輸出我可以看到正在為正確的值選擇“小時”,但陳述句的其余部分沒有添加我期望的 peak_rate_uplift。
任何關于如何將添加應用到所選行的建議或幫助將不勝感激,感覺應該很簡單,但我已經在這作業了 3 天了......
uj5u.com熱心網友回復:
你可以使用:
peak_rate = [16,17,18,19]
df['export_rate_var'] = (df['export_rate'] df.hour.isin(peak_rate) * peak_rate_uplift)
Wheredf.hour.isin([peak_rate])回傳一個布爾系列。這與整數相乘peak_rate_uplift給出了一個整數系列,即 0,其中小時不在峰值速率小時內。
uj5u.com熱心網友回復:
這是否有效:
peak_rate = [16,17,18,19]
for i in range(len(df)):
if df.hour.iloc[i].isin(peak_rate):
df['export_rate_var'] = (df['export_rate'] peak_rate_uplift)
else:
df['export_rate_var'] = df['export_rate']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454550.html
