Source code for prereise.gather.solardata.helpers
import pandas as pd
[docs]def to_reise(data):
"""Format data for REISE.
:param pandas.DataFrame data: data frame as returned by
:func:`prereise.gather.solardata.nsrdb.naive.retrieve_data`,
:func:`prereise.gather.solardata.ga_wind.ga_wind.retrieve_data`
:return: (*pandas.DataFrame*) -- data frame formatted for REISE.
:raises TypeError: if *'data'* is not a data frame.
:raises ValueError: if *'Pout'*, *'plant_id'*, *'ts'* and *'ts_id'* are not among
the columns.
"""
if not isinstance(data, pd.DataFrame):
raise TypeError("data must be a pandas.DataFrame")
if not {"Pout", "plant_id", "ts", "ts_id"}.issubset(data.columns):
raise ValueError(
"data frame must have Pout, plant_id, ts and ts_id among columns"
)
ts = data["ts"].unique()
plant_id = data[data.ts_id == 1].plant_id.values
profile = None
for i in range(1, max(data.ts_id) + 1):
data_tmp = pd.DataFrame(
{"Pout": data[data.ts_id == i].Pout.values}, index=plant_id
)
if i == 1:
profile = data_tmp.T
else:
profile = pd.concat([profile, data_tmp.T], sort=False, ignore_index=True)
profile.set_index(ts, inplace=True)
profile.index.name = "UTC"
return profile
[docs]def get_plant_id_unique_location(plant):
"""Identify unique location among plants.
:param pandas.DataFrame plant: plant data frame.
:return: (*dict*) -- keys are coordinates. Values is a list of *'plant_id'*.
:raises TypeError: if *'plant'* is not a data frame.
:raises ValueError: if *'plant_id'* is not the index and/or *'lat'* and *'lon'* are
not among the columns.
"""
if not isinstance(plant, pd.DataFrame):
raise TypeError("plant must be a pandas.DataFrame")
if not (plant.index.name == "plant_id" and {"lat", "lon"}.issubset(plant.columns)):
raise ValueError(
"data frame must have plant_id as index and lat and lon among columns"
)
return plant.groupby(["lon", "lat"]).groups