Pandas: создание столбцов группировки заголовков в группы по два столбца. - PullRequest
0 голосов
/ 16 июня 2020

Я изучаю Multiindex, groupBy, turples, читаю похожие вопросы на Stak Overflow, в поиске Google и в руководствах Youtube. Попал в сложную точку.

Как я могу сгруппировать несколько неизвестных столбцов в группы по два. Это то, что у меня есть. Заголовок и одна строка:

patterns    responses   patterns    responses   patterns   ...  
hello       hi          Where?      here        When?      ...

И я хочу создать заголовок над заголовком, который группируется в два столбца, например:

a                       a                       a
patterns    responses   patterns    responses   patterns   ...  
hello       hi          Where?      here        When?      ...

Цените свое время!

1 Ответ

1 голос
/ 16 июня 2020

Предположим, что ваш DataFrame изначально содержит "обычный" (одноуровневый) индекс по столбцам:

  patterns responses patterns.1 responses.1 patterns.2 responses.2
0    hello        hi     Where?        here      When?       there

Обратите внимание, что Pandas, например, при чтении DataFrame из файла CSV , по умолчанию добавляет числа к столбцам с повторяющимися именами, но для нас потребуются только первые 2 (без суффикса numeri c).

Обратите внимание, что заголовки столбцов на добавленном (верхнем) уровне не должны быть таким же. Чтобы иметь возможность различать последовательные пары столбцов, я назвал их Q1 , Q2 и т. Д.

Чтобы иметь MultiIndex для столбцов, вы можете действовать следующим образом:

cols = df.columns
nPairs = len(cols) // 2
h1 = [ f'Q{i}' for i in range(1, nPairs + 1) ]
df.columns = pd.MultiIndex.from_product([h1, cols[:2]])

Результат:

        Q1                 Q2                 Q3          
  patterns responses patterns responses patterns responses
0    hello        hi   Where?      here    When?     there

Другие возможности для создания MultiIndex, например, from_arrays и from_tuples . Прочтите о них и практикуйтесь во время обучения Pandas.

Редактировать после вопроса в комментарии

Одна из возможных причин вашего исключения заключается в том, что ваш входной файл содержит:

  • Индексный столбец, возможно, без имени.
  • Затем количество пар столбцов ( шаблоны / ответы ).

Затем, если вы читаете его с помощью read_csv , вы должны приказать «преобразовать» этот столбец в индекс:

df = pd.read_csv('Input.csv', index_col=[0])

Затем количество «фактических» столбцы будут на единицу меньше, поэтому мой код должен работать без исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...