我正在使用此代码
df['Bullish'] = (df['7days_Avg']>0.02).map(int)
作为分类方式; 1 =真,0 =假。
但是,当列df['7days_Avg']
没有值(NaN)时,我还希望布尔值的输出为'Nan'
以下是我得到的输出
7days_Avg Bullish
Date
2017-02-23 -0.085974 0
2017-02-24 -0.067239 0
2017-02-27 -0.084491 0
2017-02-28 -0.052741 0
2017-03-01 -0.043309 0
2017-03-02 0.092256 1
2017-03-03 0.095302 1
2017-03-06 0.069974 1
2017-03-07 0.040541 1
2017-03-08 0.005051 0
2017-03-09 0.007219 0
2017-03-10 -0.011321 0
2017-03-13 -0.007576 0
2017-03-14 NaN 0
2017-03-15 NaN 0
2017-03-16 NaN 0
如您所见,列Bullish
的最后三行的值为0
,即使7days_avg
最后三行的值为Nan
。我希望Bullish
也输出NaN
,其中7days_avg row
值为NaN
有可能吗?
答案 0 :(得分:2)
假设this.isLoading=false
列尚不存在
bullish
答案 1 :(得分:1)
您是否尝试过使用apply方法? 例如:
import pandas as pd
import numpy as np
def is_bullish(x):
if x > 0.02:
return True
elif x <= 0.02:
return False
else:
return np.NaN
df = pd.DataFrame({'avg': [np.random.randint(-10, 10)/100 for x in range(10)]})
df['avg'].ix[1] = None
print(df)
df['bullish'] = df['avg'].apply(is_bullish)
print(df)
我确信你可以让代码更优雅,但这样可以。
答案 2 :(得分:1)
或者,为了将它保持在一行,您可以稍微重新排序代码并使用map参数na_action,如下所示:
df['bullish'] = df['avg'].map(lambda x: int(x > 0.02), na_action='ignore')