#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 в любом случае.