Объединить уровни одной и той же переменной, которые находятся в последовательных столбцах

У меня есть файл данных 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

Может кто-то помочь мне с этим?

Вот как выглядят мои данные Объединить уровни одной и той же переменной, которые находятся в последовательных столбцах

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала заполните отсутствующие значения с помощью 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

Комментарии не для расширенного обсуждения; этот разговор был перешел в чат.

Samuel Liew 30.05.2019 05:26

Другие вопросы по теме