熊猫if向量化操作中的语句

时间:2019-12-05 10:46:11

标签: python pandas

df = pd.DataFrame([["a", "d"], ["", ""], ["", "3"]],
            columns=["a", "b"])
df
    a   b
0   a   d
1       
2       3

我正在寻找使用if语句进行向量化的字符串连接:

df["c"] = df["a"] + "()" + df["b"] if df["a"].item != "" else ""

但是它不起作用,因为.item返回一个系列。如果没有通过每一行的apply或lambda方法,是否可以这样做呢?在向量化操作中,大熊猫会尝试一次连接多个细胞并使其更快...

所需的输出:

df
    a   b   c
0   a   d   a ()b
1           
2       3

3 个答案:

答案 0 :(得分:3)

尝试一下:使用np.where()

df = pd.DataFrame([["a", "d"], ["", ""], ["", "3"]],
            columns=["a", "b"])

df['c']=np.where(df['a']!='',df['a'] + '()' + df['b'],'')
print(df)

输出:

   a  b     c
0  a  d  a()d
1            
2     3      

答案 1 :(得分:2)

IIUC,只要条件成立,您就可以使用mask连接两列,并使用str.cat用某些字符串分隔:

df['c'] = df.a.mask(df.a.ne(''), df.a.str.cat(df.b, sep='()'))

print(df)

   a  b    c
0  a  d  a()d
1            
2     3 

答案 2 :(得分:0)

由于没有人提到过它,因此您也可以使用apply方法:

df['c'] = df.apply(lambda r: r['a']+'()'+r['b'] if r['a']!='' else '', axis=1)

如果有人检查表演,请在下面评论:)