相对来说,Python和Pandas的新手,最终承认失败是因为我自己搞不清楚。我有一个熊猫数据从我们的能源供应商API,每行是30分钟间隔显示批发能源成本在p/kWH 'value_exc_vat',房屋的太阳能输出‘出口’和日期戳‘日期时间’。
| index |'value_exc_vat'|'datetime'|'export'|'hour'|'export_rate'|'export_rate_var'|“‘hour”是从日期开始为每一行取下来的,例如13、14、15、16等。
要计算价格/千瓦时,我需要计算
0.97 x 'value_exc_vat' + peak_rate_upliftpeak_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函数的输出,我可以看到“hour”是为正确的值选择的,但是语句的其余部分没有添加我期望的peak_rate_uplift。
任何建议或帮助如何应用到选定的行将不胜感激,感觉应该是一些简单的东西,但我已经在这3天了.
发布于 2022-04-01 13:15:41
你可以用:
peak_rate = [16,17,18,19]
df['export_rate_var'] = (df['export_rate'] + df.hour.isin(peak_rate) * peak_rate_uplift)其中df.hour.isin([peak_rate])返回一个布尔序列。这与整数peak_rate_uplift相乘,得到了一个整数序列,该整数为0,其中小时不在峰值速率小时内。
发布于 2022-04-01 12:58:53
这是否有效:
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://stackoverflow.com/questions/71707052
复制相似问题