Я видел много разных ответов на эту тему. В моей ситуации случай немного отличается, у меня есть следующий фрейм данных
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: индекс содержит повторяющиеся записи, не может изменить форму
Я хотел бы знать, если у вас есть идеи?
Спасибо
Вы можете использовать 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
[]
? то есть "A"
вместо ["A"]
?
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
'B'
поэтому их нельзя превратить в индекс.