Мультиколонка или блок плавятся, а затем поворачиваются? - PullRequest
0 голосов
/ 11 сентября 2018

Я борюсь с проблемой изменения формы данных.У меня есть примерно такие данные (но до группы C10, с несколькими индексами, которые я добавил сам.

df = pd.DataFrame({('C0',0) : {0:'ID1', 1:'ID2', 2:'ID3'},
               ('C0',1) : {0:'ID1', 1:'ID2', 2:'ID3'},
               ('C1',2) : {0:'A'  , 1:'A'  , 2:'A'},
               ('C1',3) : {0:'B'  , 1:'B'  , 2:'B'},
               ('C1',4) : {0:'C'  , 1:'C'  , 2:'C'},
               ('C2',5) : {0:'A'  , 1:'A'  , 2:'A'},
               ('C2',6) : {0:'B'  , 1:'B'  , 2:'B'},
               ('C2',7) : {0:'C'  , 1:'C'  , 2:'C'},
               ('C3',8) : {0:'A'  , 1:'A'  , 2:'A'},
               ('C3',9) : {0:'B'  , 1:'B'  , 2:'B'},
               ('C3',10) : {0:'C'  , 1:'C'  , 2:'C'}
              })

    C0      C1          C2          C3
    0   1   2   3   4   5   6   7   8   9   10
0   ID1 ID1 A   B   C   A   B   C   A   B   C
1   ID2 ID2 A   B   C   A   B   C   A   B   C
2   ID3 ID3 A   B   C   A   B   C   A   B   C

столбцы идентификаторов на самом деле не являются идентичными значениями, но уникальный ключ для этих данных по несколькимАналогично, As, Bs, Cs на самом деле не являются идентичными значениями, а просто разными типами значений. Желаемый конечный результат - это

    0   1   2   3   4   5
0   ID1 ID1 C1  A   B   C
1   ID1 ID1 C1  A   B   C
2   ID1 ID1 C1  A   B   C
3   ID2 ID2 C2  A   B   C
4   ID2 ID2 C2  A   B   C
5   ID2 ID2 C2  A   B   C
6   ID3 ID3 C3  A   B   C
7   ID3 ID3 C3  A   B   C
8   ID3 ID3 C3  A   B   C

В связи с этим я попал в промежуточную точку, гдеЯ растаял первый бит, чтобы включить оба индекса столбцов в строку, но я не смог перевести это в нужный формат. В конечном счете мне также нужно будет перечислить строки в C-группах,но я верю, что смогу сделать это. Первый пост здесь, милосердие приветствуется, но я проверил здесь и в других местах на меру своих способностей.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете растопить, затем снять:

s = df.melt(id_vars = list(df.columns[:2]), value_vars = list(df.columns[2:]))
d = s.assign(nm = s.groupby(list(s.columns[:3])).cumcount()).drop('variable_1', 1)
d.set_index(list(d.drop('value', 1).columns)).unstack().reset_index()

    C0      variable_0 value      
nm    0    1                0  1  2
0   ID1  ID1         C1     A  B  C
1   ID1  ID1         C2     A  B  C
2   ID1  ID1         C3     A  B  C
3   ID2  ID2         C1     A  B  C
4   ID2  ID2         C2     A  B  C
5   ID2  ID2         C3     A  B  C
6   ID3  ID3         C1     A  B  C
7   ID3  ID3         C2     A  B  C
8   ID3  ID3         C3     A  B  C

от hre вы можете сбросить желаемый уровень колонии

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