Как вы можете выполнить сравнение между двумя строковыми столбцами по позиции в Python?

#python #pandas #string

Вопрос:

Я хочу создать два двоичных индикатора, проверив, соответствуют ли символы в первой и третьей позициях столбца ‘A’ символам, найденным в первой и третьей позициях столбца ‘B’.

Вот пример фрейма данных:

 df = pd.DataFrame({'A' : ['a%d', 'a%', 'i%'], 
                   'B' : ['and', 'as', 'if']})

    A   B
0   a%d and
1   a%  as
2   i%  if
 

Я бы хотел, чтобы фрейм данных выглядел так, как показано ниже:

     A   B   Match_1 Match_3
0   a%d and 1       1
1   a%  as  1       0
2   i%  if  1       0
 

Я попытался использовать следующее сравнение строк, но столбец просто возвращает значения ‘0’ для столбца match_1.

 df['match_1'] = np.where(df['A'][0] == df['B'][0], 1, 0)
 

Мне интересно, существует ли функция, похожая на функцию substr, найденную в SQL.

Комментарии:

1. Попробуйте pd.Series.str.get , например np.where(df['A'].str.get(0) == df['B'].str.get(0), 1, 0)

Ответ №1:

Вы могли бы использовать str метод pandas, который может работать для нарезки элементов:

 df['match_1'] = df['A'].str[0].eq(df['B'].str[0]).astype(int)
df['match_3'] = df['A'].str[2].eq(df['B'].str[2]).astype(int)
 

вывод:

      A    B  match_1  match_3
0  a%d  and        1        1
1   a%   as        1        0
2   i%   if        1        0
 

Если у вас много позиций для тестирования, вы можете использовать цикл:

 for pos in (1, 3):
    df['match_%d' % pos] = df['A'].str[pos-1].eq(df['B'].str[pos-1]).astype(int)