Pandas以其他人为条件创建列

时间:2017-12-08 04:37:24

标签: pandas

我有一个数据帧 df = pd.DataFrame({'tag':['x','x','z','z','x','z'],'val':[1,2,3,1, 2,3]}) 是否有单行添加列'res'显示-val如果tag =='x'否则+ val,所以它看起来像   标签val res 0 x 1 -1 1 x 2 -2 2 z 3 3 3 z 1 1 4 x 2 -2 5 z 3 3

4 个答案:

答案 0 :(得分:2)

通过操纵布尔系列df.tag != 'x'

df['res'] = df.tag.ne('x').mul(2).sub(1).mul(df.val)

df
#  tag  val  res
#0   x    1   -1
#1   x    2   -2
#2   z    3    3
#3   z    1    1
#4   x    2   -2
#5   z    3    3

答案 1 :(得分:1)

您可以使用apply

执行此操作
df['res'] = df.apply(
              lambda x: x['val'] if not x['tag'] == 'x' else (-1 * x['val']), axis=1)

答案 2 :(得分:1)

使用np.where

df['res']=np.where(df.tag=='x',-df.val,df.val)
df
Out[271]: 
  tag  val  res
0   x    1   -1
1   x    2   -2
2   z    3    3
3   z    1    1
4   x    2   -2
5   z    3    3

答案 3 :(得分:1)

这样做:

# ... 
import numpy as np
df['res'] = np.where(df['tag'] == 'x', -df['val'], df['val'])