我有一个数据框,其中有两个字符串列,需要将它们串联到一个列中
2列中有3个值。
1.Column Comment_vol由Blank,Pass和VolA组成
2.Column Comment_wt由wtA,Pass组成
现在我需要在其中一列
当Comment_vol列中为空白,而Comment wt列中的任何值都为空时,则应在comment_wt列中取值,并使用虎钳vsersa
两个列中的值均均为“通过”时,则应采用“通过”
如果同时存在VolA和wtA,则应同时使用
输入:
Comment_vol Comment_wt
Pass wtA
Pass
VolA Pass
Pass Pass
wtA
VolA wtA
输出:
Comment_vol Comment_wt Comment_final
Pass wtA wtA
Pass Pass
VolA Pass VolA
Pass Pass Pass
wtA wtA
VolA wtA VolA, WtA
代码:
df['Comment'] = df['comment_vol'].str.cat(df['comment_wt'], sep =" ")
答案 0 :(得分:1)
def concatcolumns(x):
vol = str(x[0])
wt = str(x[1])
if vol in ['nan', 'Pass']:
return wt
elif wt == 'Pass':
return vol
else:
return ", ".join(x)
df['Comment'] = df[['Comment_vol', 'Comment_wt']].apply(lambda x: concatcolumns(x),axis=1)
答案 1 :(得分:1)
编辑:添加说明
df.Comment_vol.str.strip().isin(['Pass', ''])
去除前面和后面的空白,并使用isin
检查列Comment_vol
中的值是'Pass'还是''。我使用strip
来确保您的数据中是否包含诸如“ Pass”或“ VolA”之类的字样(请注意前面和后面的空白),它们仍然可以正常工作。这将返回布尔级数{'1'}或''上的True
,否则返回False
。将此分配给n
df.Comment_wt.str.strip().isin(['Pass', ''])
相同,但适用于列Comment_wt
并分配给m
'~'
是否定运算符,~n
表示Comment_vol
中的任何单词'Pass'或''
np.select([n, ~n & m], [df.Comment_wt, df.Commnt_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))
等同于逻辑
if n:
df.Comment_wt
elif ~n & m: #`Comment_vol` is NOT 'Pass' or '' and df.Comment_wt is 'Pass' or ''
df.Commnt_vol
else:
df.Comment_vol.str.cat(df.Comment_wt, sep=', ') #concat both columns using `,'
此np.select
返回如下数组:
np.select([n, ~n & m], [df.Comment_wt, df.Comment_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))
Out[350]: array(['wtA', 'Pass', 'VolA', 'Pass', 'wtA', 'VolA, wtA'], dtype=objec
t)
此数组用于创建Comment_final
的{{1}}列
您可以阅读df
的文档以获取更多信息https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html
原始:
如果我正确理解了您的描述和输出,这是使用np.select
np.select