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
答案 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)
如果有人检查表演,请在下面评论:)