Как я отправил аргумент pandas .style.apply в pandas, чтобы применить подсветку к ячейке - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь выделить разницу между двумя столбцами таблиц. Я получил две логические серии mask (mask1, mask2), чтобы сказать, есть ли какая-либо разница между двумя столбцами Кол-во и Забронировано в двух фреймах данных df_A и df_B

Я хочу выделить разницу, поэтому я прошел таким образом

def highlight_changes(df, m1, m2):
     y= 'yellow'
     df1 = pd.DataFrame('background-color: {}'.format(''), index=df.index, columns=df.columns)
    # rewrite values by boolean masks
     df1['Quantity'] = np.where(m1, 'background-color: {}'.format(y), df1['Quantity'])
     df1['Booked'] = np.where(m2, 'background-color: {}'.format(y), df1['Booked']

     return df1

### mask1 and mask2 derived previously
df_n.style.apply(highlight_changes, args=(mask1, mask2), axis=None).to_excel('writer.xlsx')

При запуске выдает ошибку:

TypeError: highlight_changes() got an unexpected keyword argument 'args'

Полагаю, это означает, что метод pandas .style.apply не содержит аргументов

Я пытался использовать лямбда-функцию, но я не очень уверен, как передать внешнее применение лямбда-функции. Я мог бы подумать, добавив mask1 и mask2 к df_n, а затем запустив этот

df_n.style.apply(lambda x: highlight_changes(x,mask1, mask2), axis=None).to_excel('writer.xlsx')

Однако я не хочу, чтобы mask1 и mask2 появлялись в электронной таблице Excel

Как я могу это сделать это?

Спасибо


ОБНОВЛЕНИЕ

df_o

S / N Pe Дата Материал Заказанное количество

3733 41116 20120726 25-22923-2 QM0200258 1 0

3734 41116 20120326 55-11943-2 SJ0030219 1 0

3735 41116 20120716 23-21963-2 PM1000210 1 0

4843 41589 20131111 1553 2215564 1 1

6861 41589 20131111 6147-1 2215565 1 1

(это старый фрейм данных)

предыдущий фрейм данных df_o предыдущий фрейм данных

enter image description here

Текущий фрейм данных df_n новый фрейм данных enter image description here

В основном я хочу обнаружить изменения в количестве и забронированные столбцы в новом фрейме данных.


Я получил маску изменений для столбца Количество и Забронировано для df_n (не является частью кадра данных)

mask1

enter image description here

mask2 выглядит аналогично с той же длиной

Update

Фактическое значение mask1 - False, True, False (Aaccordig для выборки)

Фактическое значение mask2 - True, False, False (Aaccordig to sample)


Теперь я хочу выделить изменения в df_n

enter image description here

Что я сделал Одно из возможных решений - объединить mask1 и 2 в df_n, но я не хочу mask1 и mask2 ... но у меня проблемы с их удалением отключено в функции highlight_changes.

Я пытался связать функцию отбрасывания после применения highlight_changes, но это объект стиля, а не датафрейм.

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, что у меня есть обходной путь для удаления избыточных столбцов и переименования моих столбцов: это изменение кодов в конце to_excel

  1. Сначала я объединяю свои фреймы данных df_o и df_n на основе столбца S / N
  2. Далее я вызову функцию ниже

    df_on.style.apply (лямбда x: highlight_changes (x, mask1, mask2), axis = None) .to_excel ('writer .xlsx ', columns = colsyouwant, header = headernameyouwant)

  3. В функции я обработаю и получу маску, необходимую для выборочной окраски двух моих столбцов

  4. Далее я буду использовать маску, чтобы закрасить нужную ячейку

  5. Наконец, я удалю ненужные столбцы и переименую нужный столбец

  6. сохранить

...