Выделите ячейку при условии - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь выделить все ячейки до текущей даты.Однако я выделяю все ячейки, а не только старые даты.

import pandas as pd
from datetime import datetime 

#get file 
df = pd.read_excel(r'C:\Users\cc-621.xlsx')
df

# sort the data by date 
df['Date'] = pd.to_datetime(df['Expiration Date'])
df = df.sort_values(by='Expiration Date')
df = df.reset_index()
df

# sort by todays date 
today = datetime.now(tz=None)
today

def expired(self):
    for index, rows in df.iterrows():
        color = 'red' if rows['Expiration Date'] < today else 'green'
        return 'background-color: %s' %color

new = df.style.applymap(expired)
new

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

applymap выполняется в каждой ячейке.Вам не нужно зацикливаться на каждой строке, если используете это.Тем не менее, кажется, что вы пытаетесь выделить весь ряд, поэтому вы, вероятно, хотите apply за ряд.Используя этот метод, вы должны вернуть массив того же размера, что и каждая строка.

def expired(val):
    return ['background-color: green' if val['Expiration Date'] else ''] * len(val)

new = df.style.apply(expired, axis=1)
2 голосов
/ 27 сентября 2019

Идея заключается в создании нового DataFrame, заполненного стилями по условию с помощью Styler.apply, для набора строк по условиям используется numpy.where:

def expired(x):
    c1 = 'background-color: red'
    c2 = 'background-color: green'

    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    m = x['Expiration Date'] < today
    df1['Expiration Date'] = np.where(m, c1, c2)
    return df1

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

При раскрашивании всех строк по условию используйте DataFrame.mask:

def expired(x):
    c1 = 'background-color: red'
    c2 = 'background-color: green'

    df1 = pd.DataFrame(c1, index=x.index, columns=x.columns)
    m = x['Expiration Date'] < today
    df1 = df1.mask(m, c2)
    return df1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...