如何将所有列与熊猫中的一列进行比较?
问题描述:
对于以下DF如何将所有列与熊猫中的一列进行比较?
A B ..... THRESHOLD
DATE
2011-01-01 NaN NaN ..... NaN
2012-01-01 -0.041158 -0.161571 ..... 0.329038
2013-01-01 0.238156 0.525878 ..... 0.110370
2014-01-01 0.606738 0.854177 ..... -0.095147
2015-01-01 0.200166 0.385453 ..... 0.166235
我要比较像A,B,C的列的N个....与THRESHOLD并输出结果等
df['A_CALC'] = np.where(df['A'] > df['THRESHOLD'], 1, -1)
df['B_CALC'] = np.where(df['B'] > df['THRESHOLD'], 1, -1)
如何应用上述对于所有列(A,B,C ...),没有明确写每列一条语句?
答
您可以使用df.apply
:
In [670]: df.iloc[:, :-1]\
.apply(lambda x: np.where(x > df.THRESHOLD, 1, -1), axis=0)\
.add_suffix('_CALC')
Out[670]:
A_CALC B_CALC
Date
2011-01-01 -1 -1
2012-01-01 -1 -1
2013-01-01 1 1
2014-01-01 1 1
2015-01-01 1 1
如果THRESHOLD
是不你的最后一栏,你会更好使用
df[df.columns.difference(['THRESHOLD'])].apply(lambda x: np.where(x > df.THRESHOLD, 1, -1), axis=0).add_suffix('_CALC')
答
下面是否足够?
for col in df.columns.values:
if col!= 'THRESHOLD':
newname = col+'_CALC'
df[newname] = np.where(df[col] > df['THRESHOLD'], 1, -1)
答
或者,也许你可以试试这个,通过使用subtract
,应该快于apply
(df.drop(['THRESHOLD'],axis=1).subtract(df.THRESHOLD,axis=0)>0)\
.astype(int).replace({0:-1}).add_suffix('_CALC')
我认为你可以在'pandas'中使用'where'而不是'numpy',这仍然是一个很好的解决方案 – Wen