У меня есть файл данных csv, который имеет 2 заголовка, что означает один заголовок как вопрос, а второй как подзаголовок, который имеет несколько уровней или ответов для основного заголовка. Текущий csv выглядит как таблица ниже
Header Which country do you live? Which country you previously visited? Users Canada USA UK Mexico Norway India Singapore Pakistan User 1 Canada Singapore User 2 UK India User 3 Mexico Pakistan User 4 Norway India
Мне нужно преобразовать его в таблицу ниже
Users Which country do you live? Which country you previously visited? User 1 Canada Singapore User 2 UK India User 3 Norway Pakistan User 4 Mexico India
Может кто-то помочь мне с этим?
Мой входной файл выглядит так
и вот как выглядит мой окончательный результат
Сначала заполните отсутствующие значения с помощью bfill
, затем выберите первый столбец и удалите второй уровень MultiIndex
с помощью DataFrame.droplevel
:
print (df.columns)
MultiIndex(levels=[['Header', 'Which country do you live?'],
['Canada', 'Mexico', 'UK', 'USA', 'Users']],
codes=[[0, 1, 1, 1, 1], [4, 0, 3, 2, 1]])
#if first column is not index, create it
#df = df.set_index([df.columns[0]])
#if empty strings repalce them to NaNs
#df = df.replace('', np.nan)
df = df.bfill(axis=1).iloc[:, 0].reset_index().droplevel(level=1, axis=1)
print (df)
Header Which country do you live?
0 User 1 Canada
1 User 2 UK
2 User 3 Mexico
3 User 4 Norway
Обновлено:
df = df.groupby(level=0, axis=1).apply(lambda x: x.bfill(axis=1).iloc[:, 0])
print (df)
Header Which country do you live? Which country you previously visited?
0 User 1 Canada Singapore
1 User 2 UK India
2 User 3 Mexico Pakistan
3 User 4 Norway India
Комментарии не для расширенного обсуждения; этот разговор был перешел в чат.