使用Pandas Styling(DataFrame.style属性)来迭代产品价格。

问题描述 投票:0回答:1

我有一个Pandas数据框架,其中包含了不同产品在不同日期的价格数据,列有 "日期"、"产品"、"价格"。

我的目标是突出显示该产品降价的价格单元。就像下面看到的这个例子.csv...

一个示例.csv显示了我想使用Pandas Styling实现的目标。

我知道每个产品需要分开,然后成对地评估该产品的价格。我在脚本的另一部分中使用了以下代码,成功地实现了这一点。

'''

integer = 0

for iteration in range(iterations):   

    first_price_pair = one_product.iloc[integer,2] 
    integer=integer+1
    second_price_pair = one_product.iloc[integer,2] 

# one_product is selected by using .drop_duplicates() on 'product'


price_dif = first_price_pair - second_price_pair                                

    if second_price_pair < first_price_pair:
        # highlight cell green - INDICATES PRICE REDUCTION FROM PREV PRICE                                

    elif second_price_pair == first_price_pair:         
        # no change to cell colour  

    elif second_price_pair > first_price_pair:
        # highlight cell RED - INDICATES PRICE INCREASE FROM PREV PRICE

'''

我的问题是当我试图使用-DataFrame.style-来应用高亮。似乎一旦 "样式 "被应用到DF,DF就会被转换为类型:pandas.io.format.style.Styler,然后就不能修改了。

如果有人能确认是否有可能实现我想做的事情,我会非常感激,如果有,请给我一些关于如何实现的指导。

谢谢你!我有一个Pandas的数据框架。

python pandas dataframe styling
1个回答
0
投票

要应用高亮显示,你可能想使用其中一种。

Styler.applymap()
Styler.apply()

两者之间的区别在于你选择元素的方式,因为applymap()的工作方式是元素,而apply()的工作方式是列-行-表。

这两种方法都需要一个函数来生成你想改变的CSS属性。在你的例子中,如果你把它放在if语句中,它可能是这样的。

import pandas as pd
df = pd.DataFrame(np.random.randint(-4,4, size=(5,5)))
def background_cell(x, row_idx, col_idx, color):
    b_color = 'background-color: green'
    df_styler = pd.DataFrame('', index=x.index, columns=x.columns)
    df_styler.iloc[row_idx, col_idx] = b_color
    return df_styler

df.style.apply(background_cell, row_idx=1, col_idx=1, color='green', axis=None)

这将改变单元格的背景[1,1]。你可以调用df.style.apply(),用不同的颜色和你想改变的单元格的索引。

我认为你通过键入df = df.style.apply(...)覆盖了DataFrame变量上的Styler,这就是为什么你失去了它,无法再修改它的原因。"styling "是一种你可以用来显示DataFrame的方法,所以无论何时你都应该使用它,尽管它不会是DataFrame本身的属性。

© www.soinside.com 2019 - 2024. All rights reserved.