Как объединить два значения из разных столбцов в один столбец - PullRequest
0 голосов
/ 22 мая 2019

У меня есть фрейм данных, в котором есть два строковых столбца, которые необходимо объединить в один столбец

В 2 столбцах 3 значения.

1.Колонна Comment_vol состоит из пустых, Pass и VolA

2. Столбец Comment_wt состоит из wtA, Pass

Теперь мне нужен столбец, где

  1. Когда в столбце есть пробелComment_vol и любое значение в комментарии к столбцу wt, оно должно принимать значение в столбце comment_wt и т. Е. Vsersa

  2. Когда в обоих значениях столбца есть Pass, оно должно принимать Pass

  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 ]

1 голос
/ 23 мая 2019

Редактировать : добавить объяснение

df.Comment_vol.str.strip().isin(['Pass', '']) для удаления любых передних и задних пробелов и использует isin, чтобы проверить, являются ли значения в столбце Comment_vol 'Pass' или ''. Я использую strip, чтобы убедиться, что в ваших данных есть такие слова, как «Pass» или «VolA» (обратите внимание на передние и задние пробелы), они все еще работают. Это возвращает логическую серию, True на 'Pass' или '', иначе False. Присвойте это n

df.Comment_wt.str.strip().isin(['Pass', '']) то же самое, но применяется к столбцу Comment_wt и присваивается m

'~' является оператором отрицания, ~n означает, что любое слово ни 'Pass', ни '' в Comment_vol

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 `,'

this 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 столбцов df

Вы можете прочитать документ np.select для получения дополнительной информации https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html


Оригинал:
Если я правильно понимаю ваше описание и вывод, это классический случай использования np.select

n = df.Comment_vol.str.strip().isin(['Pass', ''])
m = df.Comment_wt.str.strip().isin(['Pass', ''])

df['Comment_final'] = np.select([n, ~n & m], [df.Comment_wt, df.Comment_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))


Out[591]:
  Comment_vol Comment_wt Comment_final
0        Pass        wtA           wtA
1                   Pass          Pass
2        VolA       Pass          VolA
3        Pass       Pass          Pass
4                    wtA           wtA
5        VolA        wtA     VolA, wtA
1 голос
/ 23 мая 2019
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...