Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:groupby取消堆栈,重复索引错误_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫:groupby取消堆栈,重复索引错误

Python 熊猫:groupby取消堆栈,重复索引错误,python,pandas,dataframe,Python,Pandas,Dataframe,我无法旋转/重塑数据帧。经过melt()操作后,我有以下df: |----|------|------|------------| | ID | Rank | Var | Val | |----|------|------|------------| | 1 | 1 | date | 2020-01-01 | |----|------|------|------------| | 1 | 2 | date | 2020-02-01 | |----|------|-

我无法旋转/重塑数据帧。经过
melt()
操作后,我有以下df:

|----|------|------|------------|
| ID | Rank | Var  | Val        |
|----|------|------|------------|
|  1 |   1  | date | 2020-01-01 |
|----|------|------|------------|
|  1 |   2  | date | 2020-02-01 |
|----|------|------|------------|
|  2 |   1  | date | 2020-01-01 |
|----|------|------|------------|
|  2 |   2  | date | 2020-02-01 |
|----|------|------|------------|
|  1 |   1  | amt  | 320        |
|----|------|------|------------|
|  1 |   2  | amt  | 480        |
|----|------|------|------------|
|  2 |   1  | amt  | 620        |
|----|------|------|------------|
|  2 |   2  | amt  | 400        |
|----|------|------|------------|
我想要的结果是将秩值转换为列:

|----|------|------------|------------|
| ID | Var  | 1          | 2          |
|----|------|------------|------------|
| 1  | date | 2020-01-01 | 2020-02-01 |
|    |------|------------|------------|
|    | amt  | 320        | 480        |
|----|------|------------|------------|
| 2  | date | 2020-01-01 | 2020-02-01 |
|    |------|------------|------------|
|    | amt  | 620        | 400        |
|----|------|------------|------------|
立即尝试
unstack(level='Rank')
会导致

ValueError:索引包含重复的条目,无法重塑

好的,我们确实有重复的
id
,让我们来整合
groupby

df.set_index(['ID',Rank'])。groupby(['ID',Rank'])。apply(lambda x:x)

apply()

|----|------|------|------------|
| ID | Rank | Var  | Val        |
|----|------|------|------------|
|  1 |   1  | date | 2020-01-01 |
|    |------|------|------------|
|    |   1  | amt  | 320        |
|    |------|------|------------|
|    |   2  | date | 2020-02-01 |
|    |------|------|------------|
|    |   2  | amt  | 480        |
|----|------|------|------------|
|  2 |   1  | date | 2020-01-01 |
|    |------|------|------------|
|    |   2  | date | 2020-02-01 |
|    |------|------|------------|
|    |   1  | amt  | 620        |
|    |------|------|------------|
|    |   2  | amt  | 400        |
|----|------|------|------------|
这更近了。现在我们只需要将秩转换为col:

df.set_index(['ID',Rank'])。groupby(['ID',Rank'])。apply(lambda x:x)。unstack(level='Rank')

ValueError:索引包含重复的条目,无法重塑

我还尝试使用了
pivot\u table
,但并不是所有的列都是数字的(上面的示例已简化,但您可以在这里看到日期,这将抛出pivot\u table)

我似乎只差一个方法了,但我尝试过拆垛、重新索引、旋转、
explode()
-ing,我就是搞不懂最后一部分

如何获得所需的数据帧


谢谢大家!

您的问题是索引键必须是unstack所独有的

首先,让我们重新创建这个玩具示例

import pandas as pd
from IPython.display import display

df= pd.DataFrame(columns=['ID', 'Rank','Var', 'Val'],  data=[
    [1,1,'date', '2020-01-01'],
    [1,2,'date','2020-02-01'],
    [2,1,'date','2020-02-01'],
    [2,2,'date','2020-02-01'],
    [1,1,'amt',320],
    [1,2,'amt',480],
    [2,1,'amt',620],
    [2,2,'amt',400],
])

df = df.set_index(['ID', 'Rank'])
display(df)
现在,让我们来解决

import pandas as pd
from IPython.display import display

df= pd.DataFrame(columns=['ID', 'Rank','Var', 'Val'],  data=[
    [1,1,'date', '2020-01-01'],
    [1,2,'date','2020-02-01'],
    [2,1,'date','2020-02-01'],
    [2,2,'date','2020-02-01'],
    [1,1,'amt',320],
    [1,2,'amt',480],
    [2,1,'amt',620],
    [2,2,'amt',400],
])

df = df.set_index(['ID', 'Rank'])
display(df)
让我们在索引中放置唯一的键,即
ID
Var
字段。 现在拆垛是微不足道的

df.set_index('Var', append=True).unstack('Rank')

你会用枢轴吗
df.pivot(['ID','Var','Rank','Val')
或者ID和Var的组合会导致相同的错误吗?@It_is_Chris,谢谢你的帮助。然后发生的错误是
DataError:No numeric type to aggregate
。您没有使用
pivot
聚合任何数据,您的意思是
pivot\u table
?@It\u is\u Chris,您是对的,我意外地认为您的意思是
pivot\u table
。@Aviad_Rozenhek的答案是有效的,然而,我确实想看看一个简单的支点是否也有效。谢谢你的帮助,明白了。这起作用了。非常感谢你的帮助!