首页 > 解决方案 > 使用 if else 使用 pandas 操作数据框时出现值错误?

问题描述

这是我编写的代码,df 是数据框。我正在使用python3,我是熊猫新手,我尝试过按位运算符以及关键字和或

if((df['Day_Perc_Change']>=-0.5) & (df['Day_Perc_Change']<=0.5)):

    df['Trend']="Slight or No Change"

elif((df['Day_Perc_Change']>=0.5) & (df['Day_Perc_Change']<=1)):

    df['Trend']="Slight Positive"

elif((df['Day_Perc_Change']>=-1) & (df['Day_Perc_Change']<=-0.5)):

    df['Trend']="Slight Negative"

elif((df['Day_Perc_Change']>=1) & (df['Day_Perc_Change']<=3)):

    df['Trend']="Positive"

elif((df['Day_Perc_Change']>=-3) & (df['Day_Perc_Change']<=-1)):

    df['Trend']="Negative"

elif((df['Day_Perc_Change']>=3) & (df['Day_Perc_Change']<=7)):

    df['Trend']='Among top gainers'

别的:

    df['Trend']="Bear drop"
}

**这是我得到的错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
 I have used both and as well as | but it is working.
Can anyone help me out?
​**

标签: pythonpandas

解决方案


BAM, np.where(),它也是矢量化和高性能的。

df['Trend'] = ''
df['Trend'] = np.where((df['Day_Perc_Change']>=-0.5) & (df['Day_Perc_Change']<=0.5), "Slight or No Change", df['Trend'])
df['Trend'] = np.where((df['Day_Perc_Change']>=0.5) & (df['Day_Perc_Change']<=1), "Slight Positive", df['Trend'])
df['Trend'] = np.where((df['Day_Perc_Change']>=-1) & (df['Day_Perc_Change']<=-0.5), "Slight Negative", df['Trend'])
df['Trend'] = np.where((df['Day_Perc_Change']>=1) & (df['Day_Perc_Change']<=3), "Positive", df['Trend'])
df['Trend'] = np.where((df['Day_Perc_Change']>=-3) & (df['Day_Perc_Change']<=-1), "Negative", df['Trend'])
df['Trend'] = np.where((df['Day_Perc_Change']>=3) & (df['Day_Perc_Change']<=7), "Among top gainers", df['Trend'])

推荐阅读