Как изменить форму данных (другой тип в столбцах) - PullRequest
0 голосов
/ 26 февраля 2019

Я видел много разных ответов на эту тему.В моей ситуации ситуация немного отличается, у меня есть следующий фрейм данных

     A    B      C  
0  OPXXX  OPT1 70
1  OPXXX  OPT2 KO
2  OPXXX  OPT3 KO
3  OPXXX  OPT4 B
4  OPXXX  OPT5 175000
5  OPXXX  OPT6 Europ
6  OPXXX  OPT7 2019-01-21
7  OPXXX  OPT8 2019-05-21
8  OPXXX  OPT9 2019-10-21

Я бы хотел, чтобы это было так, но проблема в том, что pivot.table не работает из-за функции агрегации:

 A     OPT1  OPT2 OPT3 OPT4 OPT5   OPT6         OPT7       OPT8         OPT9    
OPXXX   70     KO    KO   B 175000  Europe    2019-01-21  2019-10-21  2019-10-21      

когда я это сделаю: df.pivot (index = 'A', значения = 'C', столбцы = 'B')

У меня есть следующая ошибка

Traceback (последний вызов был последним): файл "C: /Users/V002697/PycharmProjects/portia/tiaex.py", строка 17, в печати (df.pivot (index = 'ticker',values ​​= 'value', columns = 'field')) Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py", строка 3853, в сводной точке возврата, сводная (self, index = index, столбцы = столбцы, значения = значения) Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ reshape \ reshape.py", строка 378, в сводном возврате indexed.unstack (столбцы) Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py ", строка 2028, в unstack вернуть unstack (self, level, fill_value) Файл" C: \ ProgramData \ Anaconda3 \ lib \ site-packages \pandas \ core \ reshape \ reshape.py ", строка 458, в unstack fill_value = fill_value) Файл" C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ reshape \ reshape.py ", строка 110, в init self._make_selectors () Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ reshape \ reshape.py", строка 148, в _make_selectors повышает значение ValueError ('Индекс содержит дубликатзаписи, 'ValueError: Индекс содержит повторяющиеся записи, не может изменить форму

Я хотел бы знать, если у вас есть какие-нибудь идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

df1 = df.rename (столбцы = {'A': 'A1', 'B': 'B1', 'A1': 'A2', 'B1': 'B2'}). Reset_index () pd.wide_to_long (df1, заглушки = ['A', 'B'], i = 'index', j = 'id') \ .reset_index () [['A', 'B', 'id']]

A   B id

0 1 2 1 1 5 6 1 2 9 10 1 3 3 4 2 4 7 8 2 5 11 12 2

0 голосов
/ 26 февраля 2019

Вы можете использовать pandas.DataFrame.pivot:

df.pivot(index='A', columns = 'B', values='C')

B     OPT1 OPT2 OPT3 OPT4    OPT5   OPT6        OPT7        OPT8        OPT9
A                                                                           
OPXXX   70   KO   KO    B  175000  Europ  2019-01-21  2019-05-21  2019-10-21
...