我正在创建一个工具,用于比较两个数据框并返回有关excel文件差异的详细信息。
具有差异的报告示例,其中TC代表包含差异的测试用例,字段列表示包含差异的字段的名称:
TC Fields Baseline New output
1 B 34 28
C 4 25
3 C 5 28
5 B 7 23
C 8 2
D 6 24
基线文件(基线df):
TC A B C D
1 22,00 27,00 24,00 25,00
2 23,00 34,00 4,00 27,00
3 24,00 2,00 27,00 28,00
5 25,00 2,00 5,00 2,00
6 27,00 22,00 2,00 2,00
7 28,00 7,00 8,00 6,00
9 2,00 24,00 24,00 25,00
10 2,00 25,00 25,00 2,00
新输出文件(新df):
TC A B C D
1 22,00 27,00 24,00 25,00
2 23,00 28,00 25,00 27,00
3 24,00 2,00 27,00 28,00
5 25,00 2,00 28,00 2,00
6 27,00 22,00 2,00 2,00
7 28,00 23,00 2,00 24,00
9 2,00 24,00 24,00 25,00
10 2,00 25,00 25,00 2,00
正如您在报告文件的“字段”列中看到的那样,有3个字段存在差异,如TC 5所示,但如果检查基线和新输出文件,您将看到这些差异与TC正确相关7来自文件。
以下是代码示例:
def writeDetailsAboutDifferencesToNewExcelSheet(dfBaseline, dfNew):
assert (dfBaseline.columns == dfNew.columns).all(), \
"DataFrame column names are different"
if dfBaseline.equals(dfNew):
return None
else:
diff_mask = (dfBaseline != dfNew) & ~(dfBaseline.isnull() & dfNew.isnull())
ne_stacked = diff_mask.stack()
changed = ne_stacked[ne_stacked]
changed.index.names = ['TC', 'Fields']
difference_locations = np.where(diff_mask)
changed_from = dfBaseline.values[difference_locations]
changed_to = dfNew.values[difference_locations]
df = pd.DataFrame( {'Baseline': changed_from, 'New output': changed_to} , index=changed.index)
return df
问题是它返回报告中的索引号而不是数据帧中相应索引的值,或者更好地说我不知道如何返回包含差异的TC索引的值以便字段差异是否符合TC的数量而不是其索引的数量?
如果您对如何解决这个问题有什么想法,请告诉我吗?