Skip to content

Commit d4d1d7f

Browse files
authored
Merge pull request #98 from washingtonpost/bug/fix_bad_normalized_margin_math
Handle division where `normalized_margin` numerator and denominator are 0
2 parents 6069682 + 0be20fe commit d4d1d7f

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/elexmodel/handlers/data/Estimandizer.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,7 @@ def margin(data_df, col_prefix):
114114
generated_normalized_margin_column_name = f"{col_prefix}normalized_margin"
115115
data_df[generated_weights_column_name] = data_df[f"{col_prefix}dem"] + data_df[f"{col_prefix}gop"]
116116
data_df[generated_margin_column_name] = data_df[f"{col_prefix}dem"] - data_df[f"{col_prefix}gop"]
117-
data_df[generated_normalized_margin_column_name] = data_df[f"{col_prefix}margin"] / data_df[f"{col_prefix}weights"]
117+
data_df[generated_normalized_margin_column_name] = np.nan_to_num(
118+
data_df[f"{col_prefix}margin"] / data_df[f"{col_prefix}weights"], nan=0, posinf=0, neginf=0
119+
)
118120
return data_df, [generated_weights_column_name, generated_normalized_margin_column_name]

tests/handlers/test_estimandizer.py

+15
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,18 @@ def test_add_turnout_factor(va_governor_county_data):
6969

7070
assert "turnout_factor" in output_df.columns
7171
assert 0 == pytest.approx(output_df.loc[0, "turnout_factor"])
72+
73+
74+
def test_add_margin_estimand_zero_normalized_margin(va_governor_county_data):
75+
estimand_baselines = {"margin": None}
76+
estimandizer = Estimandizer()
77+
78+
# test that we're handling zeros ok
79+
test_df = va_governor_county_data.copy()
80+
test_df.loc[1, "baseline_dem"] = 0
81+
test_df.loc[1, "baseline_gop"] = 0
82+
83+
output_df = estimandizer.add_estimand_baselines(test_df, estimand_baselines, False, include_results_estimand=False)
84+
85+
assert "baseline_normalized_margin" in output_df.columns
86+
assert test_df.loc[1, "baseline_normalized_margin"] == 0

0 commit comments

Comments
 (0)