Как перевернуть строки в столбцы

lizzyone

Новичок
Пользователь
Июл 18, 2022
7
0
1
Всем привет!
Дана выгрузка с вопросами и ответами из опросников. Помогите, пожалуйста, написать код, чтобы вопросы перенести в столбцы, а ответы на них заполнить как значения в этих столбцах.

Вот пример как сейчас выглядит таблица:
кандидат вопрос ответ
кандидат_1 вопрос_1 ответ_1_1
кандидат_1 вопрос_2 ответ_1_2
кандидат_1 вопрос_3 ответ_1_3
кандидат_2 вопрос_1 ответ_2_1
кандидат_2 вопрос_2 ответ_2_2
кандидат_2 вопрос_3 ответ_2_3
кандидат_3 вопрос_1 ответ_3_1
кандидат_3 вопрос_2 ответ_3_2
кандидат_3 вопрос_3 ответ_3_3

А вот какую таблицу нужно получить:
кандидат вопрос_1 вопрос_2 вопрос_3
кандидат_1 ответ_1_1 ответ_1_2 ответ_1_3
кандидат_2 ответ_2_1 ответ_2_2 ответ_2_3
кандидат_3 ответ_3_1 ответ_3_2 ответ_3_3

Заранее спасибо за помощь!
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Python:
import numpy as np

text = """кандидат вопрос ответ
кандидат_1 вопрос_1 ответ_1_1
кандидат_1 вопрос_2 ответ_1_2
кандидат_1 вопрос_3 ответ_1_3
кандидат_2 вопрос_1 ответ_2_1
кандидат_2 вопрос_2 ответ_2_2
кандидат_2 вопрос_3 ответ_2_3
кандидат_3 вопрос_1 ответ_3_1
кандидат_3 вопрос_2 ответ_3_2
кандидат_3 вопрос_3 ответ_3_3
"""

table = np.array([line.split() for line in text.splitlines()][1:])

new_table = " ".join(["кандидат", *sorted(set(table[:, 1]))])
for candidate in sorted(set(table[:, 0])):
    answers = sorted(
        table[table[:, 0] == candidate, 2], key=lambda x: int(x.split("_")[-1])
    )
    new_table += "\n" + " ".join([candidate, *answers])

print(new_table)
 

lizzyone

Новичок
Пользователь
Июл 18, 2022
7
0
1
Python:
import numpy as np

text = """кандидат вопрос ответ
кандидат_1 вопрос_1 ответ_1_1
кандидат_1 вопрос_2 ответ_1_2
кандидат_1 вопрос_3 ответ_1_3
кандидат_2 вопрос_1 ответ_2_1
кандидат_2 вопрос_2 ответ_2_2
кандидат_2 вопрос_3 ответ_2_3
кандидат_3 вопрос_1 ответ_3_1
кандидат_3 вопрос_2 ответ_3_2
кандидат_3 вопрос_3 ответ_3_3
"""

table = np.array([line.split() for line in text.splitlines()][1:])

new_table = " ".join(["кандидат", *sorted(set(table[:, 1]))])
for candidate in sorted(set(table[:, 0])):
    answers = sorted(
        table[table[:, 0] == candidate, 2], key=lambda x: int(x.split("_")[-1])
    )
    new_table += "\n" + " ".join([candidate, *answers])

print(new_table)
спасибо за ответ, но не полчислось ваш код применить( у меня выгрузка в виде таблицы (quest_results), которую я получаю sql-запросом из базы данных и потом загружаю в df.
Во вложении пример таблицы с наполнением точь-в-точь, как у меня в реальности. А на втором листе сделала, как это должно выглядеть после преобразования.
Посмотрите, пожалуйста, так вообще возможно сделать?
 

lizzyone

Новичок
Пользователь
Июл 18, 2022
7
0
1
не получилось прикрепить файл вложением, вот ссылка на файл на диске https://docs.google.com/spreadsheet...ouid=102947978932058316864&rtpof=true&sd=true
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
не получилось прикрепить файл вложением, вот ссылка на файл на диске https://docs.google.com/spreadsheet...ouid=102947978932058316864&rtpof=true&sd=true
Там без доступа к файлу пишет, я запросил. У тебя pandas таблица? И может проще сразу SQL запрос переписать
 

lizzyone

Новичок
Пользователь
Июл 18, 2022
7
0
1
Там без доступа к файлу пишет, я запросил. У тебя pandas таблица? И может проще сразу SQL запрос переписать
Я предоставила доступ.
Я в sql делала подобное через case, но в таком случае пришлось прописывать каждый вопрос, а в моей реальной таблице их около 50. Поэтому решила найти вариант получше через питон. Или возможно через sql как-то по-другому это сделать?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
1706035040022.png


Python:
new_table = []
for candidate in set(table["кандидат"]):
    subtable = table[table["кандидат"] == candidate]
    new_table.append([candidate, *subtable['ответ'].values])
new_table = pd.DataFrame(new_table, columns=['кандидат', *table['вопрос'].unique()])
new_table
 

Форум IT Специалистов