16
16
17
17
import argparse
18
18
import json
19
+ from functools import reduce
19
20
from typing import Dict , List
20
21
22
+ import numpy as np
21
23
import openpyxl as xl
22
24
import pandas as pd
23
25
from openpyxl .formatting .rule import ColorScaleRule
@@ -165,7 +167,12 @@ def select_comparison(i, j, diffs_selection):
165
167
df = input_df .set_index (index_columns )
166
168
unique_indices = df .index .unique ()
167
169
splitted_dfs = split_df_by_columns (input_df , diff_columns )
168
- splitted_dfs = {key : df .set_index (index_columns ) for key , df in splitted_dfs .items ()}
170
+ common_cols = reduce (np .intersect1d , [df .columns for df in splitted_dfs .values ()])
171
+ df_specific_cols = np .setdiff1d (index_columns , common_cols )
172
+ splitted_dfs = {
173
+ key : df .assign (** {col : None for col in df_specific_cols }).set_index (index_columns )
174
+ for key , df in splitted_dfs .items ()
175
+ }
169
176
170
177
# drop results with duplicated indices (keep first entry only)
171
178
for key , splitted_df in splitted_dfs .items ():
@@ -181,6 +188,9 @@ def select_comparison(i, j, diffs_selection):
181
188
# compared values
182
189
for i , (key_ith , df_ith ) in enumerate (splitted_dfs .items ()):
183
190
for j , (key_jth , df_jth ) in enumerate (splitted_dfs .items ()):
191
+ common_indexes = np .intersect1d (df_ith .index , df_jth .index )
192
+ df_ith = df_ith .loc [common_indexes ]
193
+ df_jth = df_jth .loc [common_indexes ]
184
194
if select_comparison (i , j , diffs_selection ):
185
195
comparison_name = f"{ key_jth } vs { key_ith } "
186
196
for column in df_ith .columns :
@@ -196,7 +206,9 @@ def select_comparison(i, j, diffs_selection):
196
206
df [f"{ comparison_name } \n { column } is equal" ] = (
197
207
df_ith [column ] == df_jth [column ]
198
208
)
199
- df = df .reset_index ()
209
+ if len (df_specific_cols ):
210
+ df .index = df .index .droplevel (list (df_specific_cols ))
211
+ df = df .dropna (axis = 0 , how = "all" , ignore_index = False ).reset_index ()
200
212
# move to multi-index
201
213
df = df [reorder_columns (list (df .columns ))]
202
214
df .columns = [
0 commit comments