0

Предупреждение Pandas о повторяющихся записях в индексе при сводной таблице

10

Я столкнулся с проблемой при использовании метода 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 ответ(ов)

0

Судя по обновлениям в библиотеке pandas, вам нужно использовать метод pivot_table(), а не pivot(). Вот пример использования:

pandas.pivot_table(df, values='count', index='site_id', columns='week')

Этот метод позволяет агрегировать данные и обрабатывать случаи, когда в результате могут возникнуть дубликаты, что делает его более гибким и надежным в сравнении с pivot().

0

Попробуйте это:

# drop_duplicates удаляет записи, которые имеют одинаковые значения для 'foo' и 'bar'
df = df.drop_duplicates(['foo', 'bar'])
result = df.pivot('foo', 'bar', 'baz')

Этот код сначала убирает дубликаты из DataFrame, оставляя только уникальные комбинации значений в столбцах 'foo' и 'bar', а затем выполняет сводную таблицу на основе этих столбцов, используя значения из столбца 'baz'. Убедитесь, что у вас нет NaN значений в 'foo' и 'bar', так как это может привести к ошибкам в операции pivot.

0

Работает отлично для меня. Можешь ли ты показать точный вызов метода pivot, который ты используешь?

In [4]: df.pivot('name', 'id', 'x')
Out[4]: 
id    1  2
name      
john  0  0
mike  1  0
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')

Если у вас есть вопросы или требуется больше помощи, не стесняйтесь задавать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь