Как изменить форму данных (другой тип в столбцах)

1

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

     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')

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

Трассировка (последний вызов был последним): файл "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, column = columns, values = values ) Файл "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: индекс содержит повторяющиеся записи, не может изменить форму

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

Спасибо

  • 0
    Ошибка говорит о том, что вы дублировали элементы в 'B' поэтому их нельзя превратить в индекс.
  • 0
    В столбце «A» у меня есть отметка «дубликаты» в моем примере, «B» не имеет дубликатов.
Показать ещё 2 комментария
Теги:
pandas
pivot
pivot-table

2 ответа

1
Лучший ответ

Вы можете использовать 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
  • 0
    Я уже пробовал это, у меня есть трассировка для df.pivot (index = ["A"], values = ["C"], columns = 'B'): в любом случае 3853, в сводной возврате сводной (self, index = index, столбцы = столбцы, значения = значения), строка 377, в сводном индексе = MultiIndex.from_arrays ([index, self [columns]]))
  • 0
    Вы пробовали без [] ? то есть "A" вместо ["A"] ?
Показать ещё 3 комментария
0

df1 = df.rename (столбцы = {'A': 'A1', 'B': 'B1', 'A1': 'A2', 'B1': 'B2'}). reset_index() pd.wide_to_long ( df1, stubnames = ['A', 'B'], я = '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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню