Разделить столбец на мультииндексные столбцы на основе уникальных значений - PullRequest
0 голосов
/ 11 января 2020

Если у меня есть фрейм данных

test = pd.DataFrame({'IDs': ['one', 'one', 'one', 'two', 'two',
                            'two'],
                    'X': ['A', 'B', 'C', 'A', 'B', 'C'],
                    'Y': [1, 2, 3, 4, 5, 6]})

, который выглядит как

    IDs     X   Y
0   one     A   1
1   one     B   2
2   one     C   3
3   two     A   4
4   two     B   5
5   two     C   6

, что является лучшим способом для вывода формата, такого как:

IDs  one     two    
Pos X   Y   X   Y
0   A   1   A   4
1   B   2   B   5
2   C   3   C   6

ID's может изменить имя и длину (т. Е. Количество фактических ID's).

1 Ответ

0 голосов
/ 11 января 2020

Используйте GroupBy.cumcount для счетчика, затем создайте MultiIndex с помощью DataFrame.set_index, измените его на DataFrame.unstack и последний DataFrame.swaplevel с DataFrame.sort_index для порядка изменения уровня:

df = (test.set_index([test.groupby('IDs').cumcount(), 'IDs'])
           .unstack()
           .rename_axis(('Pos','IDs'), axis=1)
           .swaplevel(1, 0, axis=1)
           .sort_index(axis=1))
print (df)
IDs one    two   
Pos   X  Y   X  Y
0     A  1   A  4
1     B  2   B  5
2     C  3   C  6
...