Сравните 2 значения столбца и выделите, если разница больше 10%? - PullRequest
0 голосов
/ 02 июля 2018

у меня есть фрейм данных, где я хочу сравнить 2 значения, например A сравнить A2, B сравнить B2, C сравнить C2, Я хочу рассчитать разницу в процентах abs(A2 - A)/A2 * 100. Теперь я хочу написать в Excel с высоким, как красный, если разница более 10%

  Cols/Rows    A    A2    B    B2    C    C2
0         A   50    50   150    150  200   200
1         B  200    200  250    300  300   300
2         C  350    500  400    400  450   450

Мой подход состоит в том, чтобы перебирать каждую строку и вычислять%

for index, row in difference_df.iterrows():
    print(abs(row['A2'] - row['A'])/row['A2'] * 100) # for all columns

Кроме того, как применить цвет, если% больше 10 Я тоже посмотрел стайлинг

def highlight_cells():
    # provide your criteria for highlighting the cells here
    return ['background-color: yellow']

df.style.apply(highlight_cells)

Но как применить этот стиль и написать его, чтобы преуспеть?

1 Ответ

0 голосов
/ 02 июля 2018

Я думаю, нужно DataFrame of styles только по оригинальным DataFrame столбцам и индексам и устанавливать строки по условию с помощью loc:

def highlight_cells(x):
    c1 = 'background-color: yellow'
    c2 = '' 
    df1 = pd.DataFrame(c2, index=x.index, columns=x.columns)
    #define columns names 
    cols = ['A','B','C']
    for c in cols:
        m = ((x[c + '2'] - x[c])/x[c + '2'] * 100 ) > 10
        df1.loc[m, [c, c + '2']] = c1
    return df1

df.style.apply(highlight_cells, axis=None).to_excel('styled.xlsx', engine='openpyxl')
...