#python #pandas
#python #pandas
Вопрос:
У меня есть CSV-файл, который я считываю в фрейм данных, который выглядит следующим образом
Time AP1 AQ1 AP2 AQ2 AP3 AQ3 AP4 AQ4 AP5 AQ5
0 2000 100 10 300 30 500 50 700 70 900 90
1 2001 105 15 305 35 505 55 705 75 905 95
2 2002 110 20 310 40 510 60 710 80 910 100
3 2003 115 25 315 45 515 65 715 85 915 105
4 2004 120 30 320 50 520 70 720 90 920 110
5 2005 125 35 325 55 525 75 725 95 925 115
Как мне изменить форму фрейма данных без использования циклов таким образом, чтобы у меня были только столбцы Time, AP и AQ?
Time AP AQ
0 2000 100 10
0 2000 300 30
0 2000 500 50
0 2000 700 70
0 2000 900 90
1 2001 105 15
....
Заранее благодарю вас за любые советы.
Ответ №1:
Вы можете использовать pd.wide_to_long
настройку AP
и AQ
как stubnames
:
(pd.wide_to_long(df, stubnames=['AP','AQ'], i='Time', j='j')
.droplevel(1).reset_index())
Time AP AQ
0 2000 100 10
1 2001 105 15
2 2002 110 20
3 2003 115 25
4 2004 120 30
5 2005 125 35
6 2000 300 30
7 2001 305 35
8 2002 310 40
9 2003 315 45
10 2004 320 50
11 2005 325 55
12 2000 500 50
13 2001 505 55
14 2002 510 60
15 2003 515 65
Обновить
Для Time
столбца с дубликатами вы можете сделать:
(pd.wide_to_long(df.reset_index(), stubnames=['AP','AQ'], i='index', j='j')
.reset_index(drop=True))
Time AP AQ
0 2000 100 10
1 2000 105 15
2 2002 110 20
3 2003 115 25
4 2004 120 30
5 2005 125 35
6 2000 300 30
7 2000 305 35
8 2002 310 40
9 2003 315 45
10 2004 320 50
11 2005 325 55
12 2000 500 50
Комментарии:
1. Спасибо!! Однако следующий вопрос: я понимаю, что мои данные могут не иметь уникального времени для каждой строки, т. Е. как первая, так и вторая строки могут иметь время 2000. В этом случае я получил сообщение об ошибке «переменные id должны однозначно идентифицировать каждую строку». Я пробовал несколько способов, но не смог решить эту проблему. У вас есть какие-либо предложения?