Как сбросить значение строки на основе отметки времени? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать простую программу моделирования батареи. Алгоритм зарядки аккумулятора так же прост, как указано ниже (t - time instance):

BatteryCharge[t] = BatteryCharge[t-1]-consumption[t]+solar generation[t]

Но аккумулятор должен быть полностью разряжен к определенному периоду дня (скажем, конец дня 06:00:00), то есть столбец batteryCharge должен быть обнулен, а количество разряженного электричества должно быть сохранено в другом столбце, называемом «Отбрасываемое электричество [МВтч]». Когда аккумулятор не имеет достаточного заряда (batteryCharge < 0), он импортирует электричество. Фрейм данных выглядит так, как показано ниже:

datetime                   Consumption[MWh]  Solar_Gene[MWh]  BatteryCharge[MWh]                                             
2018-04-02 00:00:00              0.25           0.00               17.25   
2018-04-02 00:30:00              0.24           0.00               17.01   
2018-04-02 01:00:00              0.24           0.00               16.77   
2018-04-02 01:30:00              0.26           0.00               16.52   
2018-04-02 02:00:00              0.28           0.00               16.23   
2018-04-02 02:30:00              0.32           0.00               15.92   
2018-04-02 03:00:00              0.37           0.00               15.55   
2018-04-02 03:30:00              0.41           0.00               15.14   
2018-04-02 04:00:00              0.43           0.00               14.71   
2018-04-02 04:30:00              0.43           0.00               14.28   
2018-04-02 05:00:00              0.41           0.00               13.87   
2018-04-02 05:30:00              0.37           0.00               13.50   
2018-04-02 06:00:00              0.22           0.02                0.00   
2018-04-02 06:30:00              0.13           0.10                0.00   
2018-04-02 07:00:00              0.07           0.26                0.19   
2018-04-02 07:30:00              0.04           0.48                0.64   
2018-04-02 08:00:00              0.02           0.72                1.33   
2018-04-02 08:30:00              0.01           0.95                2.27   
2018-04-02 09:00:00              0.01           1.16                3.42   
2018-04-02 09:30:00              0.01           1.33                4.75   
2018-04-02 10:00:00              0.01           1.47                6.21   
2018-04-02 10:30:00              0.01           1.57                7.78   
2018-04-02 11:00:00              0.01           1.63                9.40   
2018-04-02 11:30:00              0.01           1.65               11.04   
2018-04-02 12:00:00              0.01           1.62               12.66   
2018-04-02 12:30:00              0.01           1.55               14.19   
2018-04-02 13:00:00              0.01           1.40               15.59   
2018-04-02 13:30:00              0.01           1.26               16.84   
2018-04-02 14:00:00              0.01           1.15               17.99   
2018-04-02 14:30:00              0.01           1.02               19.00   
2018-04-02 15:00:00              0.01           0.85               19.84   
2018-04-02 15:30:00              0.01           0.64               20.47   
2018-04-02 16:00:00              0.02           0.41               20.86   
2018-04-02 16:30:00              0.04           0.20               21.02   
2018-04-02 17:00:00              0.10           0.05               20.97   
2018-04-02 17:30:00              0.21           0.00               20.76   
2018-04-02 18:00:00              0.29           0.00               20.47   
2018-04-02 18:30:00              0.32           0.00               20.16   
2018-04-02 19:00:00              0.32           0.00               19.84   
2018-04-02 19:30:00              0.33           0.00               19.51   
2018-04-02 20:00:00              0.32           0.00               19.19   
2018-04-02 20:30:00              0.33           0.00               18.86   
2018-04-02 21:00:00              0.32           0.00               18.53   
2018-04-02 21:30:00              0.32           0.00               18.21   
2018-04-02 22:00:00              0.31           0.00               17.90   
2018-04-02 22:30:00              0.30           0.00               17.61   
2018-04-02 23:00:00              0.28           0.00               17.33   
2018-04-02 23:30:00              0.26           0.00               17.06   

                     Import[MWh]  Throwaway[MWh]  
datetime                                          
2018-04-02 00:00:00         0.00               0  
2018-04-02 00:30:00         0.00               0  
2018-04-02 01:00:00         0.00               0  
2018-04-02 01:30:00         0.00               0  
2018-04-02 02:00:00         0.00               0  
2018-04-02 02:30:00         0.00               0  
2018-04-02 03:00:00         0.00               0  
2018-04-02 03:30:00         0.00               0  
2018-04-02 04:00:00         0.00               0  
2018-04-02 04:30:00         0.00               0  
2018-04-02 05:00:00         0.00               0  
2018-04-02 05:30:00         0.00               0  
2018-04-02 06:00:00         0.00               0  
2018-04-02 06:30:00        -0.03               0  
2018-04-02 07:00:00         0.00               0  
2018-04-02 07:30:00         0.00               0  
2018-04-02 08:00:00         0.00               0  
2018-04-02 08:30:00         0.00               0  
2018-04-02 09:00:00         0.00               0  
2018-04-02 09:30:00         0.00               0  
2018-04-02 10:00:00         0.00               0  
2018-04-02 10:30:00         0.00               0  
2018-04-02 11:00:00         0.00               0  
2018-04-02 11:30:00         0.00               0  
2018-04-02 12:00:00         0.00               0  
2018-04-02 12:30:00         0.00               0  
2018-04-02 13:00:00         0.00               0  
2018-04-02 13:30:00         0.00               0  
2018-04-02 14:00:00         0.00               0  
2018-04-02 14:30:00         0.00               0  
2018-04-02 15:00:00         0.00               0  
2018-04-02 15:30:00         0.00               0  
2018-04-02 16:00:00         0.00               0  
2018-04-02 16:30:00         0.00               0  
2018-04-02 17:00:00         0.00               0  
2018-04-02 17:30:00         0.00               0  
2018-04-02 18:00:00         0.00               0  
2018-04-02 18:30:00         0.00               0  
2018-04-02 19:00:00         0.00               0  
2018-04-02 19:30:00         0.00               0  
2018-04-02 20:00:00         0.00               0  
2018-04-02 20:30:00         0.00               0  
2018-04-02 21:00:00         0.00               0  
2018-04-02 21:30:00         0.00               0  
2018-04-02 22:00:00         0.00               0  
2018-04-02 22:30:00         0.00               0  
2018-04-02 23:00:00         0.00               0  
2018-04-02 23:30:00         0.00               0  

Ниже приведена моя версия программы, и она как-то работает, но у меня две проблемы:

  1. В моей программе не указано время для выгрузить как метку времени (выгрузить все до 06:00:00), а использовать метод строки nth.
  2. Значения Throwaway electricity[MWh] не записываются в указанный столбец.
for t in range (1,len(df)):
    print(t)
    # Battery charge[t] = Battery charge[t-1]-consumption[t]+solar generation[t]
    df.loc[df.index[t], 'BatteryCharge[MWh]'] = df.loc[df.index[t-1], 'BatteryCharge[MWh]']-df.loc[df.index[t], 'Consumption[MWh]']+df.loc[df.index[t], 'Solar_Gene[MWh]']
    print(df.loc[df.index[t], 'BatteryCharge[MWh]'] )

    if t%48==12: # for specifying the discharge time(06:00:00). 
        if  df.loc[df.index[t], 'BatteryCharge[MWh]'] > 0:
            df.loc[df.index[t], 'BatteryCharge[MWh]'] == df.loc[df.index[t], 'Throwaway[MWh]']
            df.loc[df.index[t], 'BatteryCharge[MWh]'] =  0
            print("The amount of a throwaway electricity is " + f"{df.loc[df.index[t], 'Throwaway[MWh]']}")

        # if SOC < 0, consumption amount will be imported from the grid
    if  df.loc[df.index[t], 'BatteryCharge[MWh]'] < 0:
        df.loc[df.index[t],'Import[MWh]'] = df.loc[df.index[t], 'Consumption[MWh]']
        df.loc[df.index[t], 'BatteryCharge[MWh]'] = 0

  1. Как указать время выписки, фактически используя индекс datetime вместо метода modulo (%)? Использование индекса даты и времени очень важно для меня, так как разрядка батареи должна проводиться в нескольких сценариях ios, например, ежедневно, еженедельно и ежемесячно и т. Д. c.

  2. Почему Throwaway [MWh] значение не записывается?

1 Ответ

0 голосов
/ 26 февраля 2020

Для данных, указанных ниже:

                     Consumption[MWh]  Solar_Gene[MWh]  BatteryCharge[MWh]
datetime                                                                  
2018-04-02 00:00:00              0.25             0.00               17.25
2018-04-02 00:30:00              0.24             0.00               17.01

, где datetime при использовании индекса:

df['Import[MWh]'] = df.apply(lambda x : 0 if x['BatteryCharge[MWh]'] >= x['Consumption[MWh]'] else x['BatteryCharge[MWh]'] - x['Consumption[MWh]'], axis=1)
df['minutes'] = df.index.hour*60 + df.index.minute
df['Throwaway[MWh]'] = df.apply(lambda x : 0 if x['minutes'] != 330 else x['BatteryCharge[MWh]'], axis=1)

Вывод:

                     Consumption[MWh]  Solar_Gene[MWh]  BatteryCharge[MWh]  Import[MWh]  minutes  Throwaway[MWh]
datetime                                                                                                        
2018-04-02 00:00:00              0.25             0.00               17.25         0.00        0             0.0
2018-04-02 00:30:00              0.24             0.00               17.01         0.00       30             0.0
2018-04-02 01:00:00              0.24             0.00               16.77         0.00       60             0.0
2018-04-02 01:30:00              0.26             0.00               16.52         0.00       90             0.0
2018-04-02 02:00:00              0.28             0.00               16.23         0.00      120             0.0
2018-04-02 02:30:00              0.32             0.00               15.92         0.00      150             0.0
2018-04-02 03:00:00              0.37             0.00               15.55         0.00      180             0.0
2018-04-02 03:30:00              0.41             0.00               15.14         0.00      210             0.0
2018-04-02 04:00:00              0.43             0.00               14.71         0.00      240             0.0
2018-04-02 04:30:00              0.43             0.00               14.28         0.00      270             0.0
2018-04-02 05:00:00              0.41             0.00               13.87         0.00      300             0.0
2018-04-02 05:30:00              0.37             0.00               13.50         0.00      330            13.5
2018-04-02 06:00:00              0.22             0.02                0.00        -0.22      360             0.0
2018-04-02 06:30:00              0.13             0.10                0.00        -0.13      390             0.0
2018-04-02 07:00:00              0.07             0.26                0.19         0.00      420             0.0
2018-04-02 07:30:00              0.04             0.48                0.64         0.00      450             0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...