如何将来自不同列的两个值连接到一个列中

时间:2019-05-22 20:05:47

标签: python-3.x pandas dataframe concatenation

我有一个数据框,其中有两个字符串列,需要将它们串联到一个列中

2列中有3个值。

1.Column Comment_vol由Blank,Pass和VolA组成

2.Column Comment_wt由wtA,Pass组成

现在我需要在其中一列

  1. 当Comment_vol列中为空白,而Comment wt列中的任何值都为空时,则应在comment_wt列中取值,并使用虎钳vsersa

  2. 两个列中的值均均为“通过”时,则应采用“通过”

  3. 如果同时存在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 =" ")

2 个答案:

答案 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