Как исправить проблему «переменные id должны однозначно идентифицировать каждую строку» при использовании wide_to_long? - PullRequest
0 голосов
/ 02 мая 2019

Это следующий пост этого одного

Пожалуйста, найдите MCVE здесь

Мой фрейм данных выглядит следующим образом:

ID    Date   ColA1   ColB1   ColA2   ColB2   ColA3   ColB3 
id1   date1   1        2      3        4       5       6      
id2   date2   7        8      9        10      11      12

Я хочу разбить столбцы ColA2, ColB2, ColA3, ColB3 и снова объединить их с набором данных в виде строк (и при этом сохранить ID и Date)

Ожидаемый результат:

ID   Date     ColA  ColB
id1  date1    1      2
id1  date1    3      4
id1  date1    5      6
id2  date2    7      8
id2  date2    9      10
id2  date2    11     12

Я пробовал оба pd.wide_to_long(df, stubnames = ['ColA', 'ColB'], i = ['ID', 'Date'], j = 'value').reset_index([0,1])

и

pd.wide_to_long(df.reset_index(), stubnames = ['ColA', 'ColB'], i = ['ID', 'Date'], j = 'value').reset_index(drop=True)

Но все равно получил ту же ошибку, говоря, что the id variables need to uniquely identify each row.

Я также уже попробовал метод здесь с reset_index(), и у меня все еще есть та же проблема.

Полагаю, эта проблема возникла из моего конкретного набора данных. Но я не знаю, что с ним не так и как это выяснить, чтобы решить эту проблему. Есть ли у вас какие-либо предложения?

Пожалуйста, дайте мне знать, что я могу сделать, чтобы решить эту проблему. Спасибо!

1 Ответ

0 голосов
/ 02 мая 2019

Я не получаю никакой ошибки для обеих строк, для достижения желаемого результата просто используйте double reset_index как:

df = (pd.wide_to_long(df, stubnames=['ColA','ColB'], i=['ID','Date'], j='value')
        .reset_index([0,1])
        .reset_index(drop=True))

print(df)
    ID   Date  ColA  ColB
0  id1  date1     1     2
1  id1  date1     3     4
2  id1  date1     5     6
3  id2  date2     7     8
4  id2  date2     9    10
5  id2  date2    11    12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...