从重复的行中获取行号

时间:2019-08-26 08:29:17

标签: python excel pandas duplicates rows

我需要阅读excel文件并突出显示重复的行,而无需编辑excel或添加新的列/行。我用以下方式读取Excel文件: df = pd.read_excel(path2, sheet_name='Sheet1')df.drop_duplicates(subset=df.columns.difference(['Mark 4'])) 我得到所有重复的行,但“ Mark 4”除外。问题是我无法提取这些行号以将其用于 df.style.applymap(color_negative_red) 突出显示excel中的那些行,因为df中不包含这些行。

我尝试过 dfToList = redovi['unique_row_to_index'].tolist() 但是由于没有唯一的行,所以我无法提取数据。

df.drop_duplicates(subset=df.columns.difference(['Mark 4']))的输出是:

    Type1 Type2
0    w    A
11    w    A
12    w    A
18    w    A
19    w    A
20    w    A

[6行x 170列]

我需要提取那些不属于excel列的行号,并将其用作将来格式化的列表。

1 个答案:

答案 0 :(得分:0)

您可以将自定义函数与DataFrame.duplicatedkeep=False配合使用,以按指定的列名称屏蔽重复行:

df = pd.DataFrame({'Type1':['w'] * 3 + ['a'],
                   'Type2':['A'] * 3 + ['b'],
                   'Mark 4': range(4)})

print (df)
  Type1 Type2  Mark 4
0     w     A       0
1     w     A       1
2     w     A       2
3     a     b       3

测试:

print (df.duplicated(subset=df.columns.difference(['Mark 4']), keep=False))
0     True
1     True
2     True
3    False
dtype: bool

def highlight(x):
    c = 'background-color: red'

    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    m = x.duplicated(subset=x.columns.difference(['Mark 4']), keep=False)
    df1 = df1.mask(m, c)
    return df1

df.style.apply(highlight, axis=None)