关于索引重复输入的Pandas转向警告

时间:2012-06-27 17:58:39

标签: python 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   # (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方法调用的第一个参数。

5 个答案:

答案 0 :(得分:80)

据我所知,对pandas的更新,你必须使用pivot_table()而不是pivot()。

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

答案 1 :(得分:26)

试试这个,

#drop_duplicates removes entries which have same values for 'foo' and 'bar'
df = df.drop_duplicates(['foo','bar'])
df.pivot('foo','bar','baz')

答案 2 :(得分:2)

适合我吗?你可以发布你正在使用的确切的枢轴法呼叫吗?

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

答案 3 :(得分:2)

朋友们,我有这样的问题。就我而言,问题在于数据 - 我的专栏'信息'包含1个唯一值并导致错误。

UPD :纠正工作' pivot'对(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')

答案 4 :(得分:0)

我的数据没有重复的枢轴对,而ivot_table仍然抛出关键错误:( drop_duplicates()将我的数据截断为该对的第一个值。

输入:

Well    Reading     Filter 4
0   A2  1   116041
1   B2  1   105191
2   C2  1   93942
3   D2  1   96821
4   E2  1   85622
5   F2  1   90227
6   G2  1   95801
7   H2  1   107833
8   A2  2   115765
9   B2  2   104395
10  C2  2   93986
...
1630    G2  204     388682
1631    H2  204     444708

1632 rows × 3 columns

df_X2.pivot_table('阅读中','很好','过滤器4')

抛出:KeyError:'正在读取'

df_X2_uniq = df_X2.drop_duplicates(['Well','Reading']) 将数据截断到前8行:

    Well    Reading     Filter 4
0   A2  1   116041
1   B2  1   105191
2   C2  1   93942
3   D2  1   96821
4   E2  1   85622
5   F2  1   90227
6   G2  1   95801
7   H2  1   107833

经过2个小时的梳理,我再也不明智了……关于我应该如何使枢纽正常工作的任何暗示?