From 1f14f7be42d7307fb0233c10fe786118699524a8 Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Sat, 7 Dec 2024 20:20:17 -0500 Subject: [PATCH 1/6] Add column mapping for proposed multifuel table --- src/pudl/extract/eia860.py | 1 + .../eia860/column_maps/multifuel_proposed.csv | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv diff --git a/src/pudl/extract/eia860.py b/src/pudl/extract/eia860.py index f3da31eb05..15a7d4c83c 100644 --- a/src/pudl/extract/eia860.py +++ b/src/pudl/extract/eia860.py @@ -85,6 +85,7 @@ def get_dtypes(page, **partition): "raw_eia860__generator_wind_existing", "raw_eia860__generator_wind_retired", "raw_eia860__multifuel_existing", + "raw_eia860__multifuel_proposed", "raw_eia860__multifuel_retired", "raw_eia860__ownership", "raw_eia860__plant", diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv new file mode 100644 index 0000000000..caadd0125b --- /dev/null +++ b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv @@ -0,0 +1,53 @@ +year_index,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023 +utility_id_eia,utilcode,utilcode,utilcode,utilcode,utilcode,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id,utility_id +utility_name_eia,utilname,utilname,utilname,utilname,utilname,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name,utility_name +plant_id_eia,plntcode,plntcode,plntcode,plntcode,plntcode,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code,plant_code +plant_name_eia,plntname,plntname,plntname,plntname,plntname,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name,plant_name +state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state,state +county,,,,,,county,county,county,county,county,county,county,county,county,county,county,county,county,county,county +generator_id,gencode,gencode,gencode,gencode,gencode,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id +operational_status_code,,,,,,,,status,status,status,status,status,status,status,status,status,status,status,status,status +technology_description,,,,,,,,,,,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology +prime_mover_code,primemover,primemover,primemover,primemover,primemover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover +sector_name_eia,,,,,,,,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name +sector_id_eia,,,,,,,,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector +capacity_mw,,,,,,,,,,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw +summer_capacity_mw,,,,,,,,,,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw +winter_capacity_mw,,,,,,,,,,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw +current_month,,,,,,,,,,,,,,current_month,current_month,current_month,current_month,current_month,current_month,current_month +current_year,,,,,,,,,,,,,,current_year,current_year,current_year,current_year,current_year,current_year,current_year +energy_source_code_1,,,,,,,,,,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1 +energy_source_code_2,,,,,,,,,,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2 +multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,,,,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels +cofire_fuels,pro_cofire_fuels,pro_cofire_fuels,pro_cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels,cofire_fuels +cofire_energy_source_1,prop_cofire_energy_source_1,prop_cofire_energy_source_1,prop_cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1,cofire_energy_source_1 +cofire_energy_source_2,prop_cofire_energy_source_2,prop_cofire_energy_source_2,prop_cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2,cofire_energy_source_2 +cofire_energy_source_3,prop_cofire_energy_source_3,prop_cofire_energy_source_3,prop_cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3,cofire_energy_source_3 +cofire_energy_source_4,prop_cofire_energy_source_4,prop_cofire_energy_source_4,prop_cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4 +cofire_energy_source_5,prop_cofire_energy_source_5,prop_cofire_energy_source_5,prop_cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5 +cofire_energy_source_6,prop_cofire_energy_source_6,prop_cofire_energy_source_6,prop_cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6 +switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas +switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,,,,,,,,,,, +net_summer_capacity_with_natural_gas_mw,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_with_natural_gas_mw,,,,,,,,,,, +net_winter_capacity_with_natural_gas_mw,,,,,,,,,,,,,,,,,,,, +net_summer_capacity_with_oil_mw,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_with_oil_mw,,,,,,,,,,, +net_winter_capacity_with_oil_mw,,,,,,,,,,,,,,,,,,,, +time_to_switch_from_gas_to_oil,,,,,,,,,,,,,,,,,,,, +time_to_switch_from_oil_to_gas,,,,,,,,,,,,,,,,,,,, +factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,,,,,,,,,,, +storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,,,,,,,,,,, +air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,,,,,,,,,,, +other_limits,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,,,,,,,,,,, +cofire_oil_and_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, +cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, +max_oil_heat_input,prop_max_oil_heat,prop_max_oil_heat,prop_max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat_input,,,,,,,,,,, +max_oil_output_mw,prop_max_oil_output,prop_max_oil_output,prop_max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output_mw,,,,,,,,,,, +fuel_switch,prop_fuel_switch,prop_fuel_switch,prop_fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, +time_to_switch,prop_time_to_switch,prop_time_to_switch,prop_time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,,,,,,,,,,, +regulatory_limits,prop_regulatory_limits,prop_regulatory_limits,prop_regulatory_limits,,,regulatory_limits,regulatory_limits,regulatory_limits,regulatory_limits,,,,,,,,,,, +fuel_switch_energy_source_1,prop_fuel_switch_es1,prop_fuel_switch_es1,prop_fuel_switch_es1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,,,,,,,,,,, +fuel_switch_energy_source_2,prop_fuel_switch_es2,prop_fuel_switch_es2,prop_fuel_switch_es2,fuel_switch_energy_source_2,fuel_switch_energy_source_2,fuel_switch_energy_source_2,fuel_switch_energy_source_2,fuel_switch_energy_source_2,fuel_switch_energy_source_2,,,,,,,,,,, +fuel_switch_energy_source_3,prop_fuel_switch_es3,prop_fuel_switch_es3,prop_fuel_switch_es3,fuel_switch_energy_source_3,fuel_switch_energy_source_3,fuel_switch_energy_source_3,fuel_switch_energy_source_3,fuel_switch_energy_source_3,fuel_switch_energy_source_3,,,,,,,,,,, +fuel_switch_energy_source_4,prop_fuel_switch_es4,prop_fuel_switch_es4,prop_fuel_switch_es4,fuel_switch_energy_source_4,fuel_switch_energy_source_4,fuel_switch_energy_source_4,fuel_switch_energy_source_4,fuel_switch_energy_source_4,fuel_switch_energy_source_4,,,,,,,,,,, +fuel_switch_energy_source_5,prop_fuel_switch_es5,prop_fuel_switch_es5,prop_fuel_switch_es5,fuel_switch_energy_source_5,fuel_switch_energy_source_5,fuel_switch_energy_source_5,fuel_switch_energy_source_5,fuel_switch_energy_source_5,fuel_switch_energy_source_5,,,,,,,,,,, +fuel_switch_energy_source_6,prop_fuel_switch_es6,prop_fuel_switch_es6,prop_fuel_switch_es6,fuel_switch_energy_source_6,fuel_switch_energy_source_6,fuel_switch_energy_source_6,fuel_switch_energy_source_6,fuel_switch_energy_source_6,fuel_switch_energy_source_6,,,,,,,,,,, From fc617ba60b6f16753c0ad7d11a05bfc6bfe7a430 Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Sun, 8 Dec 2024 21:58:10 -0500 Subject: [PATCH 2/6] Add multifuel transform --- .../eia860/column_maps/multifuel_proposed.csv | 4 +- src/pudl/transform/eia.py | 1 + src/pudl/transform/eia860.py | 62 +++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv index caadd0125b..2e29b5c011 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv @@ -14,8 +14,8 @@ sector_id_eia,,,,,,,,sector,sector,sector,sector,sector,sector,sector,sector,sec capacity_mw,,,,,,,,,,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw summer_capacity_mw,,,,,,,,,,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw winter_capacity_mw,,,,,,,,,,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw -current_month,,,,,,,,,,,,,,current_month,current_month,current_month,current_month,current_month,current_month,current_month -current_year,,,,,,,,,,,,,,current_year,current_year,current_year,current_year,current_year,current_year,current_year +generator_operating_month,,,,,,,,,,,,,,current_month,current_month,current_month,current_month,current_month,current_month,current_month +generator_operating_year,,,,,,,,,,,,,,current_year,current_year,current_year,current_year,current_year,current_year,current_year energy_source_code_1,,,,,,,,,,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1 energy_source_code_2,,,,,,,,,,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2 multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,,,,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels diff --git a/src/pudl/transform/eia.py b/src/pudl/transform/eia.py index 4acbe38209..492a68e215 100644 --- a/src/pudl/transform/eia.py +++ b/src/pudl/transform/eia.py @@ -1346,5 +1346,6 @@ def finished_eia_asset(**kwargs) -> pd.DataFrame: "core_eia860__scd_generators_wind": "_core_eia860__generators_wind", "core_eia860__scd_generators_solar": "_core_eia860__generators_solar", "core_eia860__scd_generators_energy_storage": "_core_eia860__generators_energy_storage", + "core_eia860__multifuel": "_core_eia860__multifuel", }.items() ] diff --git a/src/pudl/transform/eia860.py b/src/pudl/transform/eia860.py index f8a27e2bf4..18a7f6c729 100644 --- a/src/pudl/transform/eia860.py +++ b/src/pudl/transform/eia860.py @@ -468,6 +468,68 @@ def _core_eia860__generators_wind( return wind_df +# TODO: ask about generator_operating_month vs current_month and year +# also ask how the initial column mapping happens +@asset +def _core_eia860__multifuel( + raw_eia860__multifuel_existing: pd.DataFrame, + raw_eia860__multifuel_proposed: pd.DataFrame, + raw_eia860__multifuel_retired: pd.DataFrame, +) -> pd.DataFrame: + """Transform the multifuel generators table.""" + multifuel_ex = raw_eia860__multifuel_existing + multifuel_pr = raw_eia860__multifuel_proposed + multifuel_re = raw_eia860__multifuel_retired + + boolean_columns_to_fix = ["multiple_fuels", "cofire_fuels", "switch_oil_gas"] + + # A subset of the columns have zero values, where NA is appropriate: + nulls_replace_cols = { + col: {" ": np.nan, 0: np.nan} + for col in [ + "winter_capacity_mw", + "summer_capacity_mw", + ] + } + + multifuel_df = ( + pd.concat([multifuel_ex, multifuel_pr, multifuel_re], sort=True) + .dropna(subset=["generator_id", "plant_id_eia"]) + .pipe(pudl.helpers.fix_eia_na) + .pipe( + pudl.helpers.fix_boolean_columns, + boolean_columns_to_fix=boolean_columns_to_fix, + ) + .replace(to_replace=nulls_replace_cols) + .pipe(pudl.helpers.month_year_to_date) + .pipe(PUDL_PACKAGE.encode) + ) + + multifuel_df["fuel_type_code_pudl"] = ( + multifuel_df.energy_source_code_1.str.upper().map( + pudl.helpers.label_map( + CODE_METADATA["core_eia__codes_energy_sources"]["df"], + from_col="code", + to_col="fuel_type_code_pudl", + null_value=pd.NA, + ) + ) + ) + + multifuel_df["operational_status"] = ( + multifuel_df.operational_status_code.str.upper().map( + pudl.helpers.label_map( + CODE_METADATA["core_eia__codes_operational_status"]["df"], + from_col="operational_status_code", + to_col="operational_status", + null_value=pd.NA, + ) + ) + ) + + return multifuel_df + + @asset def _core_eia860__plants(raw_eia860__plant: pd.DataFrame) -> pd.DataFrame: """Pull and transform the plants table. From 7a05a86f85c3e5dd4f50a564c54b700229776f5c Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Wed, 11 Dec 2024 09:02:39 -0500 Subject: [PATCH 3/6] Clean more boolean columns --- .../eia860/column_maps/multifuel_proposed.csv | 2 +- src/pudl/transform/eia860.py | 22 +++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv index 2e29b5c011..72d18ffd6d 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv @@ -7,7 +7,7 @@ state,state,state,state,state,state,state,state,state,state,state,state,state,st county,,,,,,county,county,county,county,county,county,county,county,county,county,county,county,county,county,county generator_id,gencode,gencode,gencode,gencode,gencode,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id,generator_id operational_status_code,,,,,,,,status,status,status,status,status,status,status,status,status,status,status,status,status -technology_description,,,,,,,,,,,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology,Technology +technology_description,,,,,,,,,,,technology,technology,technology,technology,technology,technology,technology,technology,technology,technology prime_mover_code,primemover,primemover,primemover,primemover,primemover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover,prime_mover sector_name_eia,,,,,,,,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name,sector_name sector_id_eia,,,,,,,,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector,sector diff --git a/src/pudl/transform/eia860.py b/src/pudl/transform/eia860.py index 18a7f6c729..786c4d3ca8 100644 --- a/src/pudl/transform/eia860.py +++ b/src/pudl/transform/eia860.py @@ -481,7 +481,16 @@ def _core_eia860__multifuel( multifuel_pr = raw_eia860__multifuel_proposed multifuel_re = raw_eia860__multifuel_retired - boolean_columns_to_fix = ["multiple_fuels", "cofire_fuels", "switch_oil_gas"] + boolean_columns_to_fix = [ + "air_permit_limits", + "cofire_fuels", + "factors_that_limit_switching", + "multiple_fuels", + "other_limits", + "storage_limits", + "switch_oil_gas", + "switch_when_operating", + ] # A subset of the columns have zero values, where NA is appropriate: nulls_replace_cols = { @@ -516,17 +525,6 @@ def _core_eia860__multifuel( ) ) - multifuel_df["operational_status"] = ( - multifuel_df.operational_status_code.str.upper().map( - pudl.helpers.label_map( - CODE_METADATA["core_eia__codes_operational_status"]["df"], - from_col="operational_status_code", - to_col="operational_status", - null_value=pd.NA, - ) - ) - ) - return multifuel_df From 61908360857fed50f57e8950adcd1d625b3a7359 Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Fri, 27 Dec 2024 10:37:39 -0500 Subject: [PATCH 4/6] Address most multifuel review feedback --- src/pudl/metadata/fields.py | 123 +++++++++++++++++- src/pudl/metadata/resources/eia860.py | 67 ++++++++++ .../eia860/column_maps/multifuel_proposed.csv | 8 +- src/pudl/transform/eia.py | 3 +- src/pudl/transform/eia860.py | 15 ++- 5 files changed, 205 insertions(+), 11 deletions(-) diff --git a/src/pudl/metadata/fields.py b/src/pudl/metadata/fields.py index 6f1554b40d..a4494b7ae6 100644 --- a/src/pudl/metadata/fields.py +++ b/src/pudl/metadata/fields.py @@ -87,6 +87,10 @@ "unit": "cfm", "description": "Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).", }, + "air_permit_limits": { + "type": "boolean", + "description": "True if there are air permit limits", + }, "alternative_fuel_vehicle_2_activity": { "type": "boolean", "description": "Whether the utility plants to operate alternative-fueled vehicles this coming year.", @@ -729,9 +733,41 @@ "type": "string", "description": "Originally reported short code.", }, + "cofire_100_oil": { + "type": "boolean", + "description": "Can the generator co-fire 100 oil?", + }, "cofire_fuels": { "type": "boolean", - "description": "Can the generator co-fire fuels?.", + "description": "Can the generator co-fire fuels?", + }, + "cofire_oil_and_gas": { + "type": "boolean", + "description": "Can the generator co-fire oil and gas?", + }, + "cofire_energy_source_1": { + "type": "string", + "description": "Type of fuel.", + }, + "cofire_energy_source_2": { + "type": "string", + "description": "Type of fuel.", + }, + "cofire_energy_source_3": { + "type": "string", + "description": "Type of fuel.", + }, + "cofire_energy_source_4": { + "type": "string", + "description": "Type of fuel.", + }, + "cofire_energy_source_5": { + "type": "string", + "description": "Type of fuel.", + }, + "cofire_energy_source_6": { + "type": "string", + "description": "Type of fuel.", }, "coincident_peak_demand_mw": { "type": "number", @@ -927,6 +963,14 @@ "type": "date", "description": "The most recently updated effective date on which the generator is scheduled to start operation", }, + "current_planned_generator_operating_month": { + "type": "integer", + "description": "The most recently updated effective month on which the generator is scheduled to start operation", + }, + "current_planned_generator_operating_year": { + "type": "integer", + "description": "The most recently updated effective year on which the generator is scheduled to start operation", + }, "customer_class": { "type": "string", "description": f"High level categorization of customer type: {CUSTOMER_CLASSES}.", @@ -1482,6 +1526,10 @@ "unit": "MWh", }, "expense_type": {"type": "string", "description": "The type of expense."}, + "factors_that_limit_switching": { + "type": "boolean", + "description": "True if there are factors that limit switching.", + }, "ferc1_generator_agg_id": { "type": "integer", "description": "ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.", @@ -1859,6 +1907,34 @@ "type": "number", "description": "Quanity of fuel received in tons, barrel, or Mcf.", }, + "fuel_switch": { + "type": "boolean", + "description": "TK", + }, + "fuel_switch_energy_source_1": { + "type": "string", + "description": "TK", + }, + "fuel_switch_energy_source_2": { + "type": "string", + "description": "TK", + }, + "fuel_switch_energy_source_3": { + "type": "string", + "description": "TK", + }, + "fuel_switch_energy_source_4": { + "type": "string", + "description": "TK", + }, + "fuel_switch_energy_source_5": { + "type": "string", + "description": "TK", + }, + "fuel_switch_energy_source_6": { + "type": "string", + "description": "TK", + }, "fuel_type": { "type": "string", "description": "Type of fuel.", @@ -2491,6 +2567,14 @@ "description": "Maximum heat content per physical unit of fuel in MMBtu.", "unit": "MMBtu", }, + "max_oil_heat_input": { + "type": "number", + "description": "TK", + }, + "max_oil_output_mw": { + "type": "number", + "description": "MW", + }, "max_steam_flow_1000_lbs_per_hour": { "type": "number", "unit": "1000_lbs_per_hour", @@ -2816,6 +2900,26 @@ ), "unit": "MWh", }, + "net_summer_capacity_with_natural_gas_mw": { + "type": "number", + "description": "Summer capacity with natural gas.", + "unit": "MWh", + }, + "net_summer_capacity_with_oil_mw": { + "type": "number", + "description": "Summer capacity with oil.", + "unit": "MWh", + }, + "net_winter_capacity_with_natural_gas_mw": { + "type": "number", + "description": "Winter capacity with natural gas.", + "unit": "MWh", + }, + "net_winter_capacity_with_oil_mw": { + "type": "number", + "description": "Winter capacity with oil", + "unit": "MWh", + }, "net_wheeled_power_mwh": { "type": "number", "description": ( @@ -3226,6 +3330,10 @@ ), "unit": "USD", }, + "other_limits": { + "type": "boolean", + "description": "True if there are other limits on the generator.", + }, "other_modifications_date": { "type": "date", "description": "Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", @@ -3684,6 +3792,7 @@ "type": "string", "description": "Human-readable name of a US Census region.", }, + "regulatory_limits": {"type": "string", "description": "TK"}, "regulation_mercury": { "type": "string", "description": "Most stringent type of statute or regulation code under which the boiler is operating for mercury control standards.", @@ -4274,6 +4383,10 @@ "type": "string", "description": "A code representing the enclosure type that best describes where the generator is located.", }, + "storage_limits": { + "type": "boolean", + "description": "True if there are storage limits", + }, "storage_technology_code_1": { "type": "string", "description": "The electro-chemical storage technology used for this battery applications.", @@ -4402,6 +4515,10 @@ "type": "boolean", "description": "Indicates whether the generator switch between oil and natural gas.", }, + "switch_when_operating": { + "type": "boolean", + "description": "Indicates whether the generator switches fuel while operating.", + }, "syncronized_transmission_grid": { "type": "boolean", "description": "Indicates whether standby generators (SB status) can be synchronized to the grid.", @@ -4478,6 +4595,10 @@ "rate programs." ), }, + "time_to_switch": { + "type": "string", + "description": "Time needed to switch between fuel sources", + }, "timezone": { "type": "string", "description": "IANA timezone name", diff --git a/src/pudl/metadata/resources/eia860.py b/src/pudl/metadata/resources/eia860.py index 47dd591aea..229830120e 100644 --- a/src/pudl/metadata/resources/eia860.py +++ b/src/pudl/metadata/resources/eia860.py @@ -906,6 +906,73 @@ "sources": ["eia860"], "etl_group": "eia860", }, + "core_eia860__scd_generators_multifuel": { + "description": ( + "Annually reported information about energy storage from EIA-860 Schedule 3. " + "Contains data on fuel-switching and the use of multiple fuels by surveyed generators." + ), + "schema": { + "fields": [ + "utility_id_eia", + "utility_name_eia", + "plant_id_eia", + "plant_name_eia", + "state", + "county", + "generator_id", + "operational_status_code", + "technology_description", + "prime_mover_code", + "sector_name_eia", + "sector_id_eia", + "capacity_mw", + "summer_capacity_mw", + "winter_capacity_mw", + "current_planned_generator_operating_month", + "current_planned_generator_operating_year", + "energy_source_code_1", + "energy_source_code_2", + "multiple_fuels", + "cofire_fuels", + "cofire_energy_source_1", + "cofire_energy_source_2", + "cofire_energy_source_3", + "cofire_energy_source_4", + "cofire_energy_source_5", + "cofire_energy_source_6", + "switch_oil_gas", + "switch_when_operating", + "net_summer_capacity_with_natural_gas_mw", + "net_summer_capacity_with_oil_mw", + "net_winter_capacity_with_natural_gas_mw", + "net_winter_capacity_with_oil_mw", + "factors_that_limit_switching", + "storage_limits", + "air_permit_limits", + "other_limits", + "cofire_oil_and_gas", + "cofire_100_oil", + "max_oil_heat_input", + "max_oil_output_mw", + "fuel_switch", + "time_to_switch", + "regulatory_limits", + "fuel_switch_energy_source_1", + "fuel_switch_energy_source_2", + "fuel_switch_energy_source_3", + "fuel_switch_energy_source_4", + "fuel_switch_energy_source_5", + "fuel_switch_energy_source_6", + ], + "primary_key": [ + "utility_id_eia", + "generator_id", + ], + }, + "field_namespace": "eia", + "sources": ["eia860"], + "etl_group": "eia860", + }, } """EIA-860 resource attributes organized by PUDL identifier (``resource.name``). diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv index 72d18ffd6d..df859fccf0 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv @@ -14,8 +14,8 @@ sector_id_eia,,,,,,,,sector,sector,sector,sector,sector,sector,sector,sector,sec capacity_mw,,,,,,,,,,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw,nameplate_capacity_mw summer_capacity_mw,,,,,,,,,,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw,summer_capacity_mw winter_capacity_mw,,,,,,,,,,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw,winter_capacity_mw -generator_operating_month,,,,,,,,,,,,,,current_month,current_month,current_month,current_month,current_month,current_month,current_month -generator_operating_year,,,,,,,,,,,,,,current_year,current_year,current_year,current_year,current_year,current_year,current_year +current_planned_generator_operating_month,,,,,,,,,,,,,,current_month,current_month,current_month,current_month,current_month,current_month,current_month +current_planned_generator_operating_year,,,,,,,,,,,,,,current_year,current_year,current_year,current_year,current_year,current_year,current_year energy_source_code_1,,,,,,,,,,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1,energy_source_1 energy_source_code_2,,,,,,,,,,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2,energy_source_2 multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,pro_multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,,,,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels,multiple_fuels @@ -29,11 +29,7 @@ cofire_energy_source_6,prop_cofire_energy_source_6,prop_cofire_energy_source_6,p switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,,,,,,,,,,, net_summer_capacity_with_natural_gas_mw,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_with_natural_gas_mw,,,,,,,,,,, -net_winter_capacity_with_natural_gas_mw,,,,,,,,,,,,,,,,,,,, net_summer_capacity_with_oil_mw,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_with_oil_mw,,,,,,,,,,, -net_winter_capacity_with_oil_mw,,,,,,,,,,,,,,,,,,,, -time_to_switch_from_gas_to_oil,,,,,,,,,,,,,,,,,,,, -time_to_switch_from_oil_to_gas,,,,,,,,,,,,,,,,,,,, factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,,,,,,,,,,, storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,,,,,,,,,,, air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,,,,,,,,,,, diff --git a/src/pudl/transform/eia.py b/src/pudl/transform/eia.py index 492a68e215..266a8afac1 100644 --- a/src/pudl/transform/eia.py +++ b/src/pudl/transform/eia.py @@ -1244,6 +1244,7 @@ def harvested_entity_asset_factory( "_core_eia860__generators_energy_storage", "_core_eia860__generators_wind", "_core_eia860__generators_solar", + "_core_eia860__generators_multifuel", "_core_eia860__ownership", "_core_eia860__plants", "_core_eia860__utilities", @@ -1346,6 +1347,6 @@ def finished_eia_asset(**kwargs) -> pd.DataFrame: "core_eia860__scd_generators_wind": "_core_eia860__generators_wind", "core_eia860__scd_generators_solar": "_core_eia860__generators_solar", "core_eia860__scd_generators_energy_storage": "_core_eia860__generators_energy_storage", - "core_eia860__multifuel": "_core_eia860__multifuel", + "core_eia860__scd_generators_multifuel": "_core_eia860__generators_multifuel", }.items() ] diff --git a/src/pudl/transform/eia860.py b/src/pudl/transform/eia860.py index 786c4d3ca8..ad000f8138 100644 --- a/src/pudl/transform/eia860.py +++ b/src/pudl/transform/eia860.py @@ -468,10 +468,8 @@ def _core_eia860__generators_wind( return wind_df -# TODO: ask about generator_operating_month vs current_month and year -# also ask how the initial column mapping happens @asset -def _core_eia860__multifuel( +def _core_eia860__generators_multifuel( raw_eia860__multifuel_existing: pd.DataFrame, raw_eia860__multifuel_proposed: pd.DataFrame, raw_eia860__multifuel_retired: pd.DataFrame, @@ -525,6 +523,17 @@ def _core_eia860__multifuel( ) ) + multifuel_df["operational_status"] = ( + multifuel_df.operational_status_code.str.upper().map( + pudl.helpers.label_map( + CODE_METADATA["core_eia__codes_operational_status"]["df"], + from_col="code", + to_col="operational_status", + null_value=pd.NA, + ) + ) + ) + return multifuel_df From 673ef594f43d21e36e7a77e7dabced0fd43cc8ca Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Sat, 4 Jan 2025 16:16:46 -0500 Subject: [PATCH 5/6] Update primary key and boolean field names --- src/pudl/metadata/fields.py | 64 +++++++++---------- src/pudl/metadata/resources/eia860.py | 17 ++--- .../eia860/column_maps/multifuel_existing.csv | 16 ++--- .../eia860/column_maps/multifuel_proposed.csv | 16 ++--- .../eia860/column_maps/multifuel_retired.csv | 16 ++--- src/pudl/transform/eia860.py | 15 +++-- 6 files changed, 73 insertions(+), 71 deletions(-) diff --git a/src/pudl/metadata/fields.py b/src/pudl/metadata/fields.py index a4494b7ae6..5a74e314b6 100644 --- a/src/pudl/metadata/fields.py +++ b/src/pudl/metadata/fields.py @@ -87,10 +87,6 @@ "unit": "cfm", "description": "Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).", }, - "air_permit_limits": { - "type": "boolean", - "description": "True if there are air permit limits", - }, "alternative_fuel_vehicle_2_activity": { "type": "boolean", "description": "Whether the utility plants to operate alternative-fueled vehicles this coming year.", @@ -453,6 +449,22 @@ ), "unit": "min", }, + "can_cofire_100_oil": { + "type": "boolean", + "description": "Can the generator co-fire 100 oil?", + }, + "can_cofire_oil_and_gas": { + "type": "boolean", + "description": "Can the generator co-fire oil and gas?", + }, + "can_fuel_switch": { + "type": "boolean", + "description": "TK", + }, + "can_switch_when_operating": { + "type": "boolean", + "description": "Indicates whether the generator switches fuel while operating.", + }, "capacity_eoy_mw": { "type": "number", "description": "Total end of year installed (nameplate) capacity for a plant part, in megawatts.", @@ -733,18 +745,10 @@ "type": "string", "description": "Originally reported short code.", }, - "cofire_100_oil": { - "type": "boolean", - "description": "Can the generator co-fire 100 oil?", - }, "cofire_fuels": { "type": "boolean", "description": "Can the generator co-fire fuels?", }, - "cofire_oil_and_gas": { - "type": "boolean", - "description": "Can the generator co-fire oil and gas?", - }, "cofire_energy_source_1": { "type": "string", "description": "Type of fuel.", @@ -1115,10 +1119,26 @@ "description": "Annual demand per km2 of a given service territory.", "unit": "MWh/km2", }, + "has_air_permit_limits": { + "type": "boolean", + "description": "True if there are air permit limits", + }, "has_demand_side_management": { "type": "boolean", "description": "Whether there were strategies or measures used to control electricity demand by customers", }, + "has_factors_that_limit_switching": { + "type": "boolean", + "description": "True if there are factors that limit switching.", + }, + "has_other_limits": { + "type": "boolean", + "description": "True if there are other limits on the generator.", + }, + "has_storage_limits": { + "type": "boolean", + "description": "True if there are storage limits", + }, "depreciation_type": { "type": "string", "description": ( @@ -1526,10 +1546,6 @@ "unit": "MWh", }, "expense_type": {"type": "string", "description": "The type of expense."}, - "factors_that_limit_switching": { - "type": "boolean", - "description": "True if there are factors that limit switching.", - }, "ferc1_generator_agg_id": { "type": "integer", "description": "ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.", @@ -1907,10 +1923,6 @@ "type": "number", "description": "Quanity of fuel received in tons, barrel, or Mcf.", }, - "fuel_switch": { - "type": "boolean", - "description": "TK", - }, "fuel_switch_energy_source_1": { "type": "string", "description": "TK", @@ -3330,10 +3342,6 @@ ), "unit": "USD", }, - "other_limits": { - "type": "boolean", - "description": "True if there are other limits on the generator.", - }, "other_modifications_date": { "type": "date", "description": "Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", @@ -4383,10 +4391,6 @@ "type": "string", "description": "A code representing the enclosure type that best describes where the generator is located.", }, - "storage_limits": { - "type": "boolean", - "description": "True if there are storage limits", - }, "storage_technology_code_1": { "type": "string", "description": "The electro-chemical storage technology used for this battery applications.", @@ -4515,10 +4519,6 @@ "type": "boolean", "description": "Indicates whether the generator switch between oil and natural gas.", }, - "switch_when_operating": { - "type": "boolean", - "description": "Indicates whether the generator switches fuel while operating.", - }, "syncronized_transmission_grid": { "type": "boolean", "description": "Indicates whether standby generators (SB status) can be synchronized to the grid.", diff --git a/src/pudl/metadata/resources/eia860.py b/src/pudl/metadata/resources/eia860.py index 229830120e..5d1de8f9a4 100644 --- a/src/pudl/metadata/resources/eia860.py +++ b/src/pudl/metadata/resources/eia860.py @@ -941,20 +941,20 @@ "cofire_energy_source_5", "cofire_energy_source_6", "switch_oil_gas", - "switch_when_operating", + "can_switch_when_operating", "net_summer_capacity_with_natural_gas_mw", "net_summer_capacity_with_oil_mw", "net_winter_capacity_with_natural_gas_mw", "net_winter_capacity_with_oil_mw", - "factors_that_limit_switching", - "storage_limits", - "air_permit_limits", - "other_limits", - "cofire_oil_and_gas", - "cofire_100_oil", + "has_factors_that_limit_switching", + "has_storage_limits", + "has_air_permit_limits", + "has_other_limits", + "can_cofire_oil_and_gas", + "can_cofire_100_oil", "max_oil_heat_input", "max_oil_output_mw", - "fuel_switch", + "can_fuel_switch", "time_to_switch", "regulatory_limits", "fuel_switch_energy_source_1", @@ -967,6 +967,7 @@ "primary_key": [ "utility_id_eia", "generator_id", + "plant_id_eia", ], }, "field_namespace": "eia", diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_existing.csv b/src/pudl/package_data/eia860/column_maps/multifuel_existing.csv index 2d7f719606..e75e5ea143 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_existing.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_existing.csv @@ -27,22 +27,22 @@ cofire_energy_source_4,cofire_energy_source_4,cofire_energy_source_4,cofire_ener cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5 cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6 switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas -switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating +can_switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating net_summer_capacity_with_natural_gas_mw,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw net_winter_capacity_with_natural_gas_mw,,,,,,,,,,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw net_summer_capacity_with_oil_mw,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw net_winter_capacity_with_oil_mw,,,,,,,,,,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw time_to_switch_from_gas_to_oil,,,,,,,,,,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil time_to_switch_from_oil_to_gas,,,,,,,,,,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas -factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching -storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits -air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits -other_limits,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits -cofire_oil_and_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, -cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, +has_factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching +has_storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits +has_air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits +has_other_limits,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits +can_cofire_oil_and_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, +can_cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, max_oil_heat_input,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat_input,,,,,,,,,,, max_oil_output_mw,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output_mw,,,,,,,,,,, -fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, +can_fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,,,,,,,,,,, regulatory_limits,regulatory_limits,regulatory_limits,regulatory_limits,,,regulatory_limits,regulatory_limits,regulatory_limits,regulatory_limits,,,,,,,,,,, fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,,,,,,,,,,, diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv index df859fccf0..c5e5a5d52b 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_proposed.csv @@ -27,18 +27,18 @@ cofire_energy_source_4,prop_cofire_energy_source_4,prop_cofire_energy_source_4,p cofire_energy_source_5,prop_cofire_energy_source_5,prop_cofire_energy_source_5,prop_cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5 cofire_energy_source_6,prop_cofire_energy_source_6,prop_cofire_energy_source_6,prop_cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6 switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,prop_fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas -switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,,,,,,,,,,, +can_switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,,,,,,,,,,, net_summer_capacity_with_natural_gas_mw,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,prop_net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_with_natural_gas_mw,,,,,,,,,,, net_summer_capacity_with_oil_mw,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,prop_net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_with_oil_mw,,,,,,,,,,, -factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,,,,,,,,,,, -storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,,,,,,,,,,, -air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,,,,,,,,,,, -other_limits,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,,,,,,,,,,, -cofire_oil_and_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, -cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, +has_factors_that_limit_switching,,,,factors_that_limit,factors_that_limit,,,,,,,,,,,,,,, +has_storage_limits,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,,,,,,,,,,, +has_air_permit_limits,,,,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,,,,,,,,,,, +has_other_limits,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,,,,,,,,,,, +can_cofire_oil_and_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,prop_cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, +can_cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,prop_cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, max_oil_heat_input,prop_max_oil_heat,prop_max_oil_heat,prop_max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat_input,,,,,,,,,,, max_oil_output_mw,prop_max_oil_output,prop_max_oil_output,prop_max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output,max_oil_output_mw,,,,,,,,,,, -fuel_switch,prop_fuel_switch,prop_fuel_switch,prop_fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, +can_fuel_switch,prop_fuel_switch,prop_fuel_switch,prop_fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, time_to_switch,prop_time_to_switch,prop_time_to_switch,prop_time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,time_to_switch,,,,,,,,,,, regulatory_limits,prop_regulatory_limits,prop_regulatory_limits,prop_regulatory_limits,,,regulatory_limits,regulatory_limits,regulatory_limits,regulatory_limits,,,,,,,,,,, fuel_switch_energy_source_1,prop_fuel_switch_es1,prop_fuel_switch_es1,prop_fuel_switch_es1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,,,,,,,,,,, diff --git a/src/pudl/package_data/eia860/column_maps/multifuel_retired.csv b/src/pudl/package_data/eia860/column_maps/multifuel_retired.csv index 5e4304355c..7269b23a05 100644 --- a/src/pudl/package_data/eia860/column_maps/multifuel_retired.csv +++ b/src/pudl/package_data/eia860/column_maps/multifuel_retired.csv @@ -29,22 +29,22 @@ cofire_energy_source_4,,,,,,cofire_energy_source_4,cofire_energy_source_4,cofire cofire_energy_source_5,,,,,,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5,cofire_energy_source_5 cofire_energy_source_6,,,,,,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6,cofire_energy_source_6 switch_oil_gas,,,,,,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,fuel_switch_oil_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas,switch_between_oil_and_natural_gas -switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating +can_switch_when_operating,,,,,,operating_switch,operating_switch,operating_switch,operating_switch,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating,switch_when_operating net_summer_capacity_with_natural_gas_mw,,,,,,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_ng,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw,net_summer_capacity_with_natural_gas_mw net_winter_capacity_with_natural_gas_mw,,,,,,,,,,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw,net_winter_capacity_with_natural_gas_mw net_summer_capacity_with_oil_mw,,,,,,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_oil,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw,net_summer_capacity_with_oil_mw net_winter_capacity_with_oil_mw,,,,,,,,,,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw,net_winter_capacity_with_oil_mw time_to_switch_from_gas_to_oil,,,,,,,,,,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil,time_to_switch_from_gas_to_oil time_to_switch_from_oil_to_gas,,,,,,,,,,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas,time_to_switch_from_oil_to_gas -factors_that_limit_switching,,,,,,,,,,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching -storage_limits,,,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits -air_permit_limits,,,,,,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits -other_limits,,,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits -cofire_oil_and_gas,,,,,,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, -cofire_100_oil,,,,,,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, +has_factors_that_limit_switching,,,,,,,,,,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching,factors_that_limit_switching +has_storage_limits,,,,,,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits,storage_limits +has_air_permit_limits,,,,,,airpermit_limits,airpermit_limits,airpermit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits,air_permit_limits +has_other_limits,,,,,,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits,other_limits +can_cofire_oil_and_gas,,,,,,cofire_oil_gas,cofire_oil_gas,cofire_oil_gas,cofire_oil_and_gas,,,,,,,,,,, +can_cofire_100_oil,,,,,,cofire_100_oil,cofire_100_oil,cofire_100_oil,cofire_100_oil,,,,,,,,,,, max_oil_heat_input,,,,,,max_oil_heat,max_oil_heat,max_oil_heat,max_oil_heat_input,,,,,,,,,,, max_oil_output_mw,,,,,,max_oil_output,max_oil_output,max_oil_output,max_oil_output_mw,,,,,,,,,,, -fuel_switch,,,,,,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, +can_fuel_switch,,,,,,fuel_switch,fuel_switch,fuel_switch,fuel_switch,,,,,,,,,,, time_to_switch,,,,,,time_to_switch,time_to_switch,time_to_switch,time_to_switch,,,,,,,,,,, regulatory_limits,,,,,,regulatory_limits,regulatory_limits,regulatory_limits,regulatory_limits,,,,,,,,,,, fuel_switch_energy_source_1,,,,,,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,fuel_switch_energy_source_1,,,,,,,,,,, diff --git a/src/pudl/transform/eia860.py b/src/pudl/transform/eia860.py index ad000f8138..8fddf553a4 100644 --- a/src/pudl/transform/eia860.py +++ b/src/pudl/transform/eia860.py @@ -480,14 +480,15 @@ def _core_eia860__generators_multifuel( multifuel_re = raw_eia860__multifuel_retired boolean_columns_to_fix = [ - "air_permit_limits", - "cofire_fuels", - "factors_that_limit_switching", + "has_air_permit_limits", + "can_cofire_100_oil", + "can_cofire_fuels", + "has_factors_that_limit_switching", "multiple_fuels", - "other_limits", - "storage_limits", - "switch_oil_gas", - "switch_when_operating", + "has_other_limits", + "has_storage_limits", + "can_switch_oil_gas", + "can_switch_when_operating", ] # A subset of the columns have zero values, where NA is appropriate: From f5c2f9fa115d2b877ff70cb3cb22d54b47c82351 Mon Sep 17 00:00:00 2001 From: Jennifer Melot Date: Sat, 4 Jan 2025 16:33:15 -0500 Subject: [PATCH 6/6] Add release note --- docs/release_notes.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/release_notes.rst b/docs/release_notes.rst index f48883681b..1e36041b4d 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -9,6 +9,10 @@ v2024.XX.x (2024-MM-DD) New Data Coverage ^^^^^^^^^^^^^^^^^ +EIA 860 +~~~~~~~ +* Added EIA 860 Multifuel data. See :issue:`3438` and :pr:`3946`. + Bug Fixes ^^^^^^^^^