Предупреждение Pandas о повторяющихся записях в индексе при сводной таблице
Я столкнулся с проблемой при использовании метода pivot
в библиотеке Pandas. В документации к этому методу приведено следующее описание:
Examples
--------
>>> df
foo bar baz
0 one A 1.
1 one B 2.
2 one C 3.
3 two A 4.
4 two B 5.
5 two C 6.
>>> df.pivot('foo', 'bar', 'baz')
A B C
one 1 2 3
two 4 5 6
Мой DataFrame
имеет следующую структуру:
name id x
----------------------
0 john 1 0
1 john 2 0
2 mike 1 1
3 mike 2 0
Я хочу получить результат, подобный этому:
1 2 # (это id как колонки)
----------------------
mike 0 0 # (а это 'x' как значения)
john 1 0
Однако, когда я запускаю метод pivot
, я получаю ошибку:
*** ReshapeError: Index contains duplicate entries, cannot reshape
Это не имеет смысла, так как в примере в документации также есть повторяющиеся записи в столбце foo
. Я использую столбец name
в качестве индекса для свертки, который является первым аргументом метода pivot
. Почему возникает эта ошибка, и как мне ее избежать?
4 ответ(ов)
Судя по обновлениям в библиотеке pandas, вам нужно использовать метод pivot_table()
, а не pivot()
. Вот пример использования:
pandas.pivot_table(df, values='count', index='site_id', columns='week')
Этот метод позволяет агрегировать данные и обрабатывать случаи, когда в результате могут возникнуть дубликаты, что делает его более гибким и надежным в сравнении с pivot()
.
Попробуйте это:
# drop_duplicates удаляет записи, которые имеют одинаковые значения для 'foo' и 'bar'
df = df.drop_duplicates(['foo', 'bar'])
result = df.pivot('foo', 'bar', 'baz')
Этот код сначала убирает дубликаты из DataFrame, оставляя только уникальные комбинации значений в столбцах 'foo' и 'bar', а затем выполняет сводную таблицу на основе этих столбцов, используя значения из столбца 'baz'. Убедитесь, что у вас нет NaN значений в 'foo' и 'bar', так как это может привести к ошибкам в операции pivot.
Работает отлично для меня. Можешь ли ты показать точный вызов метода pivot, который ты используешь?
In [4]: df.pivot('name', 'id', 'x')
Out[4]:
id 1 2
name
john 0 0
mike 1 0
Друзья, у меня возникла такая проблема. В моем случае ошибка была вызвана данными — в столбце 'information' содержалось только одно уникальное значение, что и привело к ошибке.
UPD: Для корректной работы метода 'pivot' пары (id_user, information) не должны иметь дубликатов.
Это работает:
df2 = pd.DataFrame({'id_user':[1,2,3,4,4,5,5],
'information':['phon','phon','phone','phone1','phone','phone1','phone'],
'value': [1, '01.01.00', '01.02.00', 2, '01.03.00', 3, '01.04.00']})
df2.pivot(index='id_user', columns='information', values='value')
Это не работает:
df2 = pd.DataFrame({'id_user':[1,2,3,4,4,5,5],
'information':['phone','phone','phone','phone','phone','phone','phone'],
'value': [1, '01.01.00', '01.02.00', 2, '01.03.00', 3, '01.04.00']})
df2.pivot(index='id_user', columns='information', values='value')
Если у вас есть вопросы или требуется больше помощи, не стесняйтесь задавать!
Как изменить порядок столбцов в DataFrame?
Преобразование списка словарей в DataFrame pandas
Установить значение для конкретной ячейки в DataFrame pandas с использованием индекса
Выбор строки из pandas Series/DataFrame по целочисленному индексу
Получить все ключи из объекта GroupBy в Pandas