#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)