Как разделить столбец фрейма данных на строки, чтобы получить все после n-го вхождения substring

#python #pandas #string #dataframe #split

#python #pandas #строка #фрейм данных #разделить

Вопрос:

У меня есть df:

                id value
0      a_john_doe   123
1  b_robert_frost   456
  

Я хочу перезаписать столбец ‘id’, чтобы отрезать все после второго ‘_’, чтобы получить это:

                id value
0           a_john   123
1         b_robert   456
  

Я пытаюсь выполнить разделение, а затем воссоединиться, но это выдает ошибку:

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

Я могу сделать то же самое с жестко запрограммированной строкой, поэтому я не слишком уверен, где я ошибаюсь:

 print('_'.join('a_john_doe'.split('_')[:2]))
# test gives back 'a_john'

df = pd.DataFrame({'id':['a_john_doe','b_robert_frost'], 'value':['123','456']})
df.id = '_'.join(df.id.str.split('_')[:2])
print(df)
  

Ответ №1:

Давайте сделаем:

 df['id'] = ['_'.join(x.split('_')[:2]) for x in df['id']]
  

Или в вашем стиле:

 df['id'] = df['id'].str.split('_')[:2].agg('_'.join)
  

Вывод:

          id  value
0    a_john    123
1  b_robert    456