向量化条件列



假设我有一个如下的数据帧:

df = pd.DataFrame()
df['v'] = [0,0,0,0,0,1,1,1,1]
df['w'] = [1,1,1,1,1,0,0,0,0]
df['x'] = (df.v + df.w)+10
df['y'] = (df.v + df.w)+5
df['z'] = ...

我需要一个新的列,df.z,等于df.x if df.v = 1df.y if df.w = 1

当然,我可以在这里使用df.apply:

def non_vector(row):

if row['v'] == 1: return row['x']
if row['w'] == 1: return row['y'] 
df['z'] = df.apply(non_vector, axis=1)
print df
v  w   x  y   z
0  0  1  11  6   6
1  0  1  11  6   6
2  0  1  11  6   6
3  0  1  11  6   6
4  0  1  11  6   6
5  1  0  11  6  11
6  1  0  11  6  11
7  1  0  11  6  11
8  1  0  11  6  11

但是对于矢量化方法来说,这个问题似乎已经足够直接了,因为这实际上是非常慢的。

感谢您的帮助。

为什么不这样做呢:

df['z'] = np.where(df['v']==1, df['x'],np.where(df['v']==0,df['y'], np.nan))

如果df.v只取值0和1,则

df['z'] = np.where(df['v']==1, df['x'],df['y'])

就足够了。在这两种情况下你都会得到:

v  w   x  y     z
0  0  1  11  6   6.0
1  0  1  11  6   6.0
2  0  1  11  6   6.0
3  0  1  11  6   6.0
4  0  1  11  6   6.0
5  1  0  11  6  11.0
6  1  0  11  6  11.0
7  1  0  11  6  11.0
8  1  0  11  6  11.0

相关内容

  • 没有找到相关文章

最新更新