Ercot 60d Utils

Contents

Ercot 60d Utils#

Module Contents#

Classes Summary#

CurveOutputFormat

Output format for extracted offer curves.

Functions#

extract_curve(df[, curve_name, mw_suffix, ...])

Extract offer curve from dataframe columns.

extract_curve_as_pg_string(df, mw_cols, price_cols)

Like extract_curve() but returns PG array strings directly.

make_storage_resources(data)

match_gen_load_names(list1, list2)

Match generator and load names

process_as_offer_curves(df[, output_format])

process_dam_as_only_awards(df)

process_dam_as_only_offers(df[, output_format])

process_dam_energy_bid_awards(df)

process_dam_energy_bids(df[, output_format])

process_dam_energy_only_offer_awards(df)

process_dam_energy_only_offers(df[, output_format])

process_dam_esr(df[, output_format])

process_dam_esr_as_offers(df[, output_format])

process_dam_gen(df[, output_format])

process_dam_load(df)

process_dam_or_gen_load_as_offers(df[, output_format])

process_dam_ptp_obligation_bid_awards(df)

process_dam_ptp_obligation_bids(df)

process_dam_ptp_obligation_option(df)

process_dam_ptp_obligation_option_awards(df)

process_sced_as_offer_updates_in_op_hour(df)

Process SCED AS Offer Updates in Operating Hour data.

process_sced_esr(df[, output_format])

process_sced_gen(df[, output_format])

process_sced_load(df[, output_format])

process_sced_resource_as_offers(df[, output_format])

Process SCED Resource AS Offers data.

Attributes Summary#

Contents#

class gridstatus.ercot_60d_utils.CurveOutputFormat[source]#

Bases: enum.StrEnum

Output format for extracted offer curves.

LIST: Returns Python list-of-lists per cell (default). PG_ARRAY_AS_STRING: Returns PostgreSQL array strings like ‘{{mw,price},{mw,price}}’

directly, using ~3x less peak memory.

Initialize self. See help(type(self)) for accurate signature.

Attributes

LIST

‘list’

PG_ARRAY_AS_STRING

‘pg_array_as_string’

gridstatus.ercot_60d_utils.DAM_AS_ONLY_AWARDS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'AS Type', 'Offer ID', 'Quantity1 Award', 'Quantity2...[source]#
gridstatus.ercot_60d_utils.DAM_AS_ONLY_AWARDS_KEY = 'dam_as_only_awards'[source]#
gridstatus.ercot_60d_utils.DAM_AS_ONLY_OFFERS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'AS Type', 'Offer ID', 'Offer Curve'][source]#
gridstatus.ercot_60d_utils.DAM_AS_ONLY_OFFERS_KEY = 'dam_as_only_offers'[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_BID_AWARDS_COLUMNS = ['Interval Start', 'Interval End', 'Settlement Point Name', 'QSE', 'Bid ID', 'Energy Only Bid...[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_BID_AWARDS_KEY = 'dam_energy_bid_awards'[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_BIDS_COLUMNS = ['Interval Start', 'Interval End', 'Settlement Point Name', 'QSE', 'Energy Only Bid ID', 'Energy...[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_BIDS_KEY = 'dam_energy_bids'[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_ONLY_OFFER_AWARDS_COLUMNS = ['Interval Start', 'Interval End', 'Settlement Point Name', 'QSE', 'Offer ID', 'Energy Only...[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_ONLY_OFFER_AWARDS_KEY = 'dam_energy_only_offer_awards'[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_ONLY_OFFERS_COLUMNS = ['Interval Start', 'Interval End', 'Settlement Point Name', 'QSE', 'Energy Only Offer ID',...[source]#
gridstatus.ercot_60d_utils.DAM_ENERGY_ONLY_OFFERS_KEY = 'dam_energy_only_offers'[source]#
gridstatus.ercot_60d_utils.DAM_ESR_AS_OFFERS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'DME', 'Resource Name', 'Multi-Hour Block Flag',...[source]#
gridstatus.ercot_60d_utils.DAM_ESR_AS_OFFERS_KEY = 'dam_esr_as_offers'[source]#
gridstatus.ercot_60d_utils.DAM_ESR_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'DME', 'Resource Name', 'Resource Type', 'Settlement...[source]#
gridstatus.ercot_60d_utils.DAM_ESR_KEY = 'dam_esr'[source]#
gridstatus.ercot_60d_utils.DAM_GEN_RESOURCE_AS_OFFERS_KEY = 'dam_gen_resource_as_offers'[source]#
gridstatus.ercot_60d_utils.DAM_GEN_RESOURCE_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'DME', 'Resource Name', 'Resource Type', 'Settlement...[source]#
gridstatus.ercot_60d_utils.DAM_GEN_RESOURCE_KEY = 'dam_gen_resource'[source]#
gridstatus.ercot_60d_utils.DAM_LOAD_RESOURCE_AS_OFFERS_KEY = 'dam_load_resource_as_offers'[source]#
gridstatus.ercot_60d_utils.DAM_LOAD_RESOURCE_COLUMNS = ['Time', 'Interval Start', 'Interval End', 'Resource Name', 'Max Power Consumption for Load...[source]#
gridstatus.ercot_60d_utils.DAM_LOAD_RESOURCE_KEY = 'dam_load_resource'[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_BID_AWARDS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'Settlement Point Source', 'Settlement Point Sink',...[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_BID_AWARDS_KEY = 'dam_ptp_obligation_bid_awards'[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_BIDS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'Settlement Point Source', 'Settlement Point Sink',...[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_BIDS_KEY = 'dam_ptp_obligation_bids'[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_OPTION_AWARDS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'Settlement Point Source', 'Settlement Point Sink',...[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_OPTION_AWARDS_KEY = 'dam_ptp_obligation_option_awards'[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_OPTION_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'Settlement Point Source', 'Settlement Point Sink',...[source]#
gridstatus.ercot_60d_utils.DAM_PTP_OBLIGATION_OPTION_KEY = 'dam_ptp_obligation_option'[source]#
gridstatus.ercot_60d_utils.DAM_RESOURCE_AS_OFFERS_COLUMNS = ['Interval Start', 'Interval End', 'QSE', 'DME', 'Resource Name', 'Multi-Hour Block Flag',...[source]#
gridstatus.ercot_60d_utils.extract_curve(df, curve_name=None, mw_suffix='-MW', price_suffix='-Price', mw_cols=None, price_cols=None, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#

Extract offer curve from dataframe columns.

Supports two modes: 1. Auto-detect columns by curve_name prefix (default):

Looks for columns like “{curve_name}-MW1”, “{curve_name}-Price1”

  1. Explicit column lists: Pass mw_cols and price_cols directly for custom column patterns e.g., mw_cols=[“QUANTITY_MW1”, “QUANTITY_MW2”],

    price_cols=[“PRICE1_URS”, “PRICE2_URS”]

Parameters:
  • df – DataFrame with curve data columns.

  • curve_name – Prefix for auto-detecting MW/Price columns.

  • mw_suffix – Suffix for MW columns in auto-detect mode.

  • price_suffix – Suffix for price columns in auto-detect mode.

  • mw_cols – Explicit list of MW column names.

  • price_cols – Explicit list of price column names.

  • output_format – CurveOutputFormat.LIST (default) returns Python list-of-lists per cell. CurveOutputFormat.PG_ARRAY_AS_STRING returns PG array strings like ‘{{mw,price},{mw,price}}’ directly, using ~3x less peak memory.

gridstatus.ercot_60d_utils.extract_curve_as_pg_string(df, mw_cols, price_cols)[source]#

Like extract_curve() but returns PG array strings directly.

Returns pd.Series of strings like ‘{{100.0,25.5},{200.0,60.0}}’ instead of Python list-of-lists. ~3x less peak memory.

gridstatus.ercot_60d_utils.logger[source]#
gridstatus.ercot_60d_utils.make_storage_resources(data)[source]#
gridstatus.ercot_60d_utils.match_gen_load_names(list1, list2)[source]#

Match generator and load names

gridstatus.ercot_60d_utils.process_as_offer_curves(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_as_only_awards(df)[source]#
gridstatus.ercot_60d_utils.process_dam_as_only_offers(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_energy_bid_awards(df)[source]#
gridstatus.ercot_60d_utils.process_dam_energy_bids(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_energy_only_offer_awards(df)[source]#
gridstatus.ercot_60d_utils.process_dam_energy_only_offers(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_esr(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_esr_as_offers(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_gen(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_load(df)[source]#
gridstatus.ercot_60d_utils.process_dam_or_gen_load_as_offers(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_dam_ptp_obligation_bid_awards(df)[source]#
gridstatus.ercot_60d_utils.process_dam_ptp_obligation_bids(df)[source]#
gridstatus.ercot_60d_utils.process_dam_ptp_obligation_option(df)[source]#
gridstatus.ercot_60d_utils.process_dam_ptp_obligation_option_awards(df)[source]#
gridstatus.ercot_60d_utils.process_sced_as_offer_updates_in_op_hour(df)[source]#

Process SCED AS Offer Updates in Operating Hour data.

This data tracks the count of Ancillary Service offer updates made by resources during operating hours.

Expects df to already have Interval Start/End from parse_doc().

gridstatus.ercot_60d_utils.process_sced_esr(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_sced_gen(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_sced_load(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#
gridstatus.ercot_60d_utils.process_sced_resource_as_offers(df, output_format: CurveOutputFormat | str = CurveOutputFormat.LIST)[source]#

Process SCED Resource AS Offers data.

This data contains ancillary service offer curves at the SCED timestamp level. Each row has price/quantity pairs for each AS type across 6 blocks.

Source columns: PRICEn_URS, PRICEn_DRS, PRICEn_RRSPF, PRICEn_RRSUF,

PRICEn_RRSFF, PRICEn_NS, PRICEn_ECRS, QUANTITY_MWn (n=1-6)

Creates offer curves for each AS type. Format depends on output_format: list-of-lists like [[mw, price], …] or PG array strings.

Parameters:
  • df – DataFrame with raw SCED resource AS offers data.

  • output_format – “list” (default) returns Python list-of-lists per cell. “pg_array_as_string” returns PG array strings like ‘{{mw,price},{mw,price}}’ directly, using ~3x less peak memory.

gridstatus.ercot_60d_utils.SCED_AS_OFFER_UPDATES_IN_OP_HOUR_COLUMNS = ['Interval Start', 'Interval End', 'Resource Name', 'AS Type', 'Count of Updates During...[source]#
gridstatus.ercot_60d_utils.SCED_AS_OFFER_UPDATES_IN_OP_HOUR_KEY = 'sced_as_offer_updates_in_op_hour'[source]#
gridstatus.ercot_60d_utils.SCED_ESR_COLUMNS = ['SCED Timestamp', 'QSE', 'DME', 'Resource Name', 'Resource Type', 'SCED1 Offer Curve', 'SCED2...[source]#
gridstatus.ercot_60d_utils.SCED_ESR_KEY = 'sced_esr'[source]#
gridstatus.ercot_60d_utils.SCED_GEN_RESOURCE_COLUMNS = ['SCED Timestamp', 'QSE', 'DME', 'Resource Name', 'Resource Type', 'Telemetered Resource...[source]#
gridstatus.ercot_60d_utils.SCED_GEN_RESOURCE_KEY = 'sced_gen_resource'[source]#
gridstatus.ercot_60d_utils.SCED_LOAD_RESOURCE_COLUMNS = ['SCED Timestamp', 'QSE', 'DME', 'Resource Name', 'Telemetered Resource Status', 'Max Power...[source]#
gridstatus.ercot_60d_utils.SCED_LOAD_RESOURCE_KEY = 'sced_load_resource'[source]#
gridstatus.ercot_60d_utils.SCED_RESOURCE_AS_OFFERS_COLUMNS = ['SCED Timestamp', 'Resource Name', 'Curve Type', 'URS Offer Curve', 'DRS Offer Curve', 'RRSPFR...[source]#
gridstatus.ercot_60d_utils.SCED_RESOURCE_AS_OFFERS_KEY = 'sced_resource_as_offers'[source]#
gridstatus.ercot_60d_utils.SCED_SMNE_COLUMNS = ['Interval Start', 'Interval End', 'Interval Time', 'Interval Number', 'Resource Name', 'Interval Value'][source]#
gridstatus.ercot_60d_utils.SCED_SMNE_KEY = 'sced_smne'[source]#