Панды пытаются преобразовать фрейм данных, получая строки между определенными строками

#python #pandas #dataframe

Вопрос:

У меня есть набор данных, который выглядит примерно так:

COL1 COL2
Имя имя 2
a 1
b 2
остановка остановка
имя 2 имя 2_2
c 3
d 4
e 5
остановка остановка

Я хочу превратить его во что-то вроде:

COL1 COL2 COL3
Имя a 1
Имя b 1
имя 2 c 3
имя 2 d 4
имя 2 e 5

Я пытался найти способ подмножества набора данных, чтобы получить все между «именем» и «Стоп».

Ответ №1:

Один из способов преобразования:

 d = {'COL1': {0: 'name', 1: 'a', 2: 'b', 3: 'stop', 4: 'name2', 5: 'c', 6: 'd', 7: 'e', 8: 'stop'}, 'COL2': {0: 'name_2', 1: '1', 2: '2', 3: 'stop', 4: 'name2_2', 5: '3', 6: '4', 7: '5', 8: 'stop'}}
df = pd.DataFrame(d)
m = df.COL1.str.contains('name')
df.loc[m, 't'] = df.loc[m]['COL1']
df = df.fillna(method= 'ffill')
df = df.groupby('t').apply(lambda x : x.iloc[1:-1]).reset_index(drop=True)
 

Переименование/сортировка столбцов :

 df.columns = ['COL2','COL3','COL1']
df = df[sorted(df.columns)]
 

выход:

     COL1 COL2 COL3
0   name    a    1
1   name    b    2
2  name2    c    3
3  name2    d    4
4  name2    e    5
 

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

1. Поправьте меня, если я ошибаюсь, но этот импорт np не нужен. 1 в любом случае.