如何获取python索引值(多索引)
我正在创build一个工具来比较两个数据框,并返回有关excel文件差异的详细信息。
具有差异的报告示例,其中TC代表包含差异的testing用例,字段列表示包含差异的字段的名称:
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 ABCD 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 ABCD 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
正如您在报告文件的Fields列中看到的那样,有3个字段与TC 5有区别,但是如果您检查了基线和新的输出文件,则会看到这些差异与文件。
这里是代码示例:
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的数量而不是其索引的数量?
如果你有一些想法如何解决这个问题,你可以让我知道吗?