Pandas Dataframe if语句使用apply错误

时间:2016-07-13 19:56:30

标签: python pandas

我目前正在尝试创建IF语句以将类元素应用于某些单元格,因此我可以使用CSS设置它们的样式。我目前无法使用pandas提供的样式选项,因为我使用的是.to_html函数。

我的表格如下。 {'Pwer':[ - 。3,-1.3,-2.4],'趋势':[1.3,-1.3,-1.7]}

我试过

if((hist['Pwer']<0) & (hist['Trend']<0)):
            hist['Pwer']=hist['Pwer'].apply(lambda x:'<span class="Negative Trend_neg">{0}</span>'.format(x))

但结果是

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),     a.any() or a.all().

即使我将.all()应用于hist ['Pwer']和hist ['Trend'],我也不太清楚我是否理解发生了什么。任何帮助都会很有意义。

2 个答案:

答案 0 :(得分:2)

这样的事情会起作用:

cond =  ((hist['Pwer']<0) & (hist['Trend']<0))
hist['Pwer'][cond] = hist['Pwer'][cond].apply(lambda x:'<span class="Negative Trend_neg">{0}</span>'.format(x))

输出

                                           Pwer  Trend
0                                          -0.3    1.3
1  <span class="Negative Trend_neg">-1.3</span>   -1.3
2  <span class="Negative Trend_neg">-2.4</span>   -1.7

答案 1 :(得分:0)

我认为你需要mask

hist = pd.DataFrame({'Pwer':[-.3,-1.3,-2.4], 'Trend':[1.3,-1.3,-1.7]} )
print (hist)
    Pwer  Trend
0  -0.3    1.3
1  -1.3   -1.3
2  -2.4   -1.7

hist['Pwer']=hist['Pwer'].mask((hist['Pwer']<0) & (hist['Trend']<0), 
                                hist['Pwer'].apply(lambda x:'<span class="Negative Trend_neg">{0}</span>'.format(x))) 
print (hist)
                                           Pwer  Trend
0                                          -0.3    1.3
1  <span class="Negative Trend_neg">-1.3</span>   -1.3
2  <span class="Negative Trend_neg">-2.4</span>   -1.7