首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Python Pandas的电池SOC简单模型

基于Python Pandas的电池SOC简单模型
EN

Stack Overflow用户
提问于 2022-02-14 12:01:11
回答 1查看 254关注 0票数 1

我在使用Pandas进行数据分析方面相对较新。

我试图用几种条件定义一个函数,然后使用apply()函数来建模电池存储系统的充电状态(SOC)。

由于我需要访问以前的SOC,所以在我的功能中使用shift(1)。

我真的试图使它简单,但我仍然不知道如何限制电池SOC为16 kWh,并使我的代码运行。

我有以下Pandas Dataframe:带有太阳能电池板的房屋的电力概况

然后,我在Pandas Dataframe中创建了另外两个列“盈余”和"SOC“。

1表示电力生产盈余,0表示电力负荷较高。

代码语言:javascript
复制
Electricity_profiles_df['surplus'] = Electricity_profiles_df['Electricity Surplus / Deficit [kWh]'].apply(lambda x: 1 if x > 0 else 0)

Electricity_profiles_df['SOC'] = np.NaN

然后,我将我的功能定义如下:

代码语言:javascript
复制
def state_of_charge(surplus, SOC, power):
if surplus == 1:
    if SOC.shift(1) < 16:
        SOC = power + SOC.shift(1)
    else:
        SOC = SOC.shift(1)
elif surplus == 0:
    if SOC.shift(1) > 3.2:
        SOC = SOC.shift(1) + power
    else:
        SOC = SOC.shift(1)
else:
    SOC = 3.2
return SOC

最后,我尝试使用新定义的函数,并按行顺序使用apply()函数:

代码语言:javascript
复制
Electricity_profiles_df['SOC'] = Electricity_profiles_df['surplus','SOC', 'Electricity Surplus / Deficit [kWh]'].apply(state_of_charge, axis=1)

显示以下错误:

KeyError

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-10-05 08:22:08

在木星笔记本上试试这个。基本上,您在numpy数组中工作,并且只在最后将这些数组添加到一个熊猫数据数组中。

代码语言:javascript
复制
import pandas as pd
import numpy as np

pd.options.plotting.backend = "plotly"

%%time
#Parameters
SOC0 = 0
sim_time = 90
A_demand = 1
A_prod = 1.2
max_SOC = 16

#Signals generation

    #Initial empty arrays
t = np.arange(0,sim_time)
grid_demand =  np.zeros(sim_time)
battery = np.zeros(sim_time)
charge_array = np.zeros(sim_time)

    #External production and demand signals (can set any shape of curve)
prod = (np.sin(t/(2*np.pi))*A_prod + A_prod)/2
demand = np.ones(sim_time)*A_demand

#Estimates battery SOC
SOC = SOC0
for i in t:

   battery[i] = SOC

    #Energy required from the grid (No surplus)
    if demand[i] - prod[i] >= 0:
    
        #Battery has some charge left for next step
        if (demand[i] - prod[i] - SOC) < 0 :
            grid_demand[i] = 0
            charge = -(demand[i] - prod[i])
    
        #Battery fully discharges
        else:
            grid_demand[i] = demand[i] - prod[i] - SOC
            charge = -SOC

    #Surplus of energy demand
    elif demand[i] - prod[i] < 0:
    
        grid_demand[i] = 0
        charge = prod[i] - demand[i]

    SOC = min(SOC + charge,max_SOC)
    charge_array[i] = charge
    
#Creates data frame
data_dict = {"demand":demand,
            "prod":prod,
            "battery":battery,
            "grid_demand":grid_demand,
            "charge":charge_array}

df = pd.DataFrame(data_dict)

#Plots
df.plot()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71111557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档