Подтвердить что ты не робот

Pandas предупреждение о повторных вводах в индекс

В Pandas документации по методу pivot мы имеем:

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

My DataFrame структурирован следующим образом:

   name   id     x
----------------------
0  john   1      0
1  john   2      0
2  mike   1      1
3  mike   2      0

И я хочу что-то вроде этого:

      1    2   # (this is the id as columns)
----------------------
mike  0    0   # (and this is the 'x' as values)
john  1    0

Но когда я запускаю метод pivot, он говорит:

*** ReshapeError: Index contains duplicate entries, cannot reshape

Это не имеет смысла, даже в примере повторяются записи в столбце foo. Я использую столбец name как индекс поворота, первый аргумент вызова метода pivot.

4b9b3361

Ответ 1

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

In [4]: df.pivot('name', 'id', 'x')
Out[4]: 
id    1  2
name      
john  0  0
mike  1  0

Ответ 2

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

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

Ответ 3

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

df.drop_duplicates(['foo','bar'])
df.pivot('foo','bar','baz')

Ответ 4

Друзья, у меня была такая проблема. В моем случае проблема была в данных - моя информация о столбце содержала 1 уникальное значение, и это вызвало ошибку.

UPD: для исправления работы пары "поворот" (id_user, информация) не должны иметь dublicates

Работает:

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