如何检查值是正数还是负数并在数据框的列中插入新值

D3V*_*LPR 2 dataframe python-3.x pandas

我正在使用熊猫和蟒蛇,我有一个任务,我需要检查

        GDP         diff    sign
Quarter             
1999q4  12323.3     NaN     None
2000q1  12359.1     35.8    None
2000q2  12592.5     233.4   None
2000q3  12607.7     15.2    None
2000q4  12679.3     71.6    None
Run Code Online (Sandbox Code Playgroud)

让上面的数据框是 df ,当我这样做时

if df.iloc[2]['diff'] > 0:
    df.iloc[2]['sign'] = "Positive"
Run Code Online (Sandbox Code Playgroud)

该值未在数据帧上更新。有什么地方我做错了。它是一个直接赋值,就像我们如何做 df['something'] = 'some value' 并且通过这样做,它将比值插入到该列下的 df 中。但是当我执行上述需要确定正面或负面的操作时,它仍然显示为无

df.iloc[2]['sign']
Run Code Online (Sandbox Code Playgroud)

我尝试将 apply 与 lambdas 一起使用,但无法得到我想要的。

一些帮助将不胜感激谢谢。

jez*_*ael 5

您可以先使用 doublenumpy.where来过滤NaNisnull,然后再按条件df['diff'] > 0

df.sign = np.where(df['diff'].isnull(), np.nan,
          np.where(df['diff'] > 0,   'Positive', 'Negative'))
print (df)
  Quarter      GDP   diff      sign
0  1999q4  12323.3    NaN       NaN
1  2000q1  12359.1   35.8  Positive
2  2000q2  12592.5  233.4  Positive
3  2000q3  12607.7   15.2  Positive
4  2000q4  12679.3  -71.6  Negative
Run Code Online (Sandbox Code Playgroud)

因为如果只对值使用df['diff'] > 0get :NegativeNaN

df.sign = np.where(df['diff'] > 0, 'Positive', 'Negative')
print (df)
  Quarter      GDP   diff      sign
0  1999q4  12323.3    NaN  Negative
1  2000q1  12359.1   35.8  Positive
2  2000q2  12592.5  233.4  Positive
3  2000q3  12607.7   15.2  Positive
4  2000q4  12679.3  -71.6  Negative
Run Code Online (Sandbox Code Playgroud)