我有一个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的数据框架。
要应用高亮显示,你可能想使用其中一种。
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本身的属性。