Как мне удалить и пересортировать (переиндексировать) столбцы после применения стиля в пандах Python? - PullRequest
0 голосов
/ 05 июля 2018

Есть ли способ удалить столбцы или строки после применения стиля в пандах Python? И пересортировать их?

styled = df.style.apply(colorize, axis=None)
#remove _x columns
yonly = list(sorted(set(styled.columns) - set(df.filter(regex='_x$').columns)))
###Remove columns that end with "_x" here
styled.to_excel('styled.xlsx', engine='openpyxl', freeze_panes=(1,1))

Большинство вещей, которые я пробовал, были недоступны, т.е. styled.reindex(columns=yonly) возвращено AttributeError: 'Styler' object has no attribute 'reindex'

styled.columns = yonly возвращено AttributeError: 'list' object has no attribute 'get_indexer'

styled = styled[yonly] возврат TypeError: 'Styler' object is not subscriptable

Продолжение с Цвет определенных ячеек из двух не совпадающих столбцов с использованием стиля python pandas.where (или иным образом) и экспорт в Excel

1 Ответ

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

После комментария @ jezrael об удалении столбцов перед стилизацией и раскрашиванием я получил ответ:)

Решением было передать дополнительный аргумент, сделав доступным исходный фрейм данных df. И раскрасил фрейм данных df_tmp только "_y". :)

df = pd.DataFrame({
    'config_dummy1': ["dummytext"] * 10,
    'a_y': ["a"] * 10,
    'config_size_x': ["textstring"] * 10,
    'config_size_y': ["textstring"] * 10,
    'config_dummy2': ["dummytext"] * 10,
    'a_x': ["a"] * 10
})
df.at[5, 'config_size_x'] = "xandydontmatch"
df.at[9, 'config_size_y'] = "xandydontmatch"
df.at[0, 'a_x'] = "xandydontmatch"
df.at[3, 'a_y'] = "xandydontmatch"
print(df)

def color(x, extra):
    c1 = 'color: #ffffff; background-color: #ba3018'
    df1 = pd.DataFrame('', index=x.index, columns=x.columns)

    #select only columns ends with _x and _y and sorting
    cols = sorted(extra.filter(regex='_x$|_y$').columns)
    #loop by pairs and assign style by mask
    for colx, coly in zip(cols[::2],cols[1::2]):
        #pairs columns 
        m = extra[colx] != extra[coly]
        df1.loc[m, [coly]] = c1
    return df1

yonly = list(sorted(set(df.columns) - set(df.filter(regex='_x$').columns)))
df_tmp = df[yonly]
df_tmp.style.apply(color, axis=None, extra=df).to_excel('styled.xlsx', engine='openpyxl')

Спасибо, замечательные люди ТАК! : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...