Excel 如何在python中获取索引值(多索引)
我正在创建一个工具,用于比较两个数据帧,并返回有关excel文件中差异的详细信息 带有差异的报告示例,其中TC表示包含差异的测试用例,fields列表示包含差异的字段名称:Excel 如何在python中获取索引值(多索引),excel,python-3.x,pandas,dataframe,comparison,Excel,Python 3.x,Pandas,Dataframe,Comparison,我正在创建一个工具,用于比较两个数据帧,并返回有关excel文件中差异的详细信息 带有差异的报告示例,其中TC表示包含差异的测试用例,fields列表示包含差异的字段名称: TC Fields Baseline New output 1 B 34 28 C 4 25 3 C 5 28 5 B 7 23 C
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):
新输出文件(新df):
例如,您可以在报告文件的字段列中看到,TC 5有3个字段存在差异,但如果您检查基线和新输出文件,您将看到这些差异实际上与文件中的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的编号,而不是其索引的编号
你能告诉我你是否知道如何解决这个问题吗?我认为你的值TC1也错了。是的,但我以TC5为例,它对所有人都是一样的。如果你看一下报告中的TC 1,你会发现它实际上与TC2相关,这就是我想纠正的:)我相信它会发生,因为在TC列中,我返回索引值,而不是错误TC的值,索引从0开始,增量为1,而TC列的值可以是任意整数。
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
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