Python 数据帧中的透视行

Python 数据帧中的透视行,python,pandas,dataframe,pivot,Python,Pandas,Dataframe,Pivot,我的数据帧当前看起来像: ID FIELD VALUE 12463634 TEST 22.2 12463634 E_REASON 010 12463634 IN_SCOPE Y 12463635 TEST 99.5 12463635 E_REASON 020 12463635 IN_SC

我的数据帧当前看起来像:

ID               FIELD        VALUE
12463634          TEST         22.2 
12463634      E_REASON          010
12463634      IN_SCOPE            Y
12463635          TEST         99.5 
12463635      E_REASON          020
12463635      IN_SCOPE            N
我希望我的数据框看起来像:

ID           TEST     E_REASON     IN_SCOPE
12463634     22.2          010            Y
12463635     99.5          020            N
我已尝试运行以下代码:

df.pivot_table(index = "ID", columns = "FIELD", values = "VALUE")
但是,我看到了这个错误:

DataError: No numeric types to aggregate
请告知。谢谢

使用或:


如果需要使用某些聚合函数进行复制-
sum
,“join

print (df)
         ID     FIELD VALUE
0  12463634      TEST  22.2
1  12463634  E_REASON   010
2  12463634  IN_SCOPE     Y<-same ID and FIELED
3  12463634  IN_SCOPE    Y1<-same ID and FIELED
4  12463635      TEST  99.5
5  12463635  E_REASON   020
6  12463635  IN_SCOPE     N


df = df.pivot_table(index = "ID", columns = "FIELD", values = "VALUE", aggfunc='sum')
print (df)
FIELD    E_REASON IN_SCOPE  TEST
ID                              
12463634      010      YY1  22.2
12463635      020        N  99.5

另一种选择是执行以下操作:

df.groupby(['ID', 'FIELD']).sum().unstack()
这样您就不会丢失标签
“值”

解释 您可以
groupby
sum()
这将为您提供

In [31]: df.groupby(['ID', 'FIELD']).sum()
Out[31]:
                  VALUE
ID       FIELD
12463634 E_REASON   010
         IN_SCOPE     Y
         TEST      22.2
12463635 E_REASON   020
         IN_SCOPE     N
         TEST      99.5

然后,
unstack
将最后一个索引行移动到一列

我认为您可能需要的是
pivot
而不是
pivot\u表
。只有当它们生成非唯一索引时。我刚试过,pivot工作得很好。pivot工作得很好-谢谢!
df = df.pivot_table(index = "ID", columns = "FIELD", values = "VALUE", aggfunc=','.join)
print (df)
FIELD    E_REASON IN_SCOPE  TEST
ID                              
12463634      010     Y,Y1  22.2
12463635      020        N  99.5
df.groupby(['ID', 'FIELD']).sum().unstack()
In [31]: df.groupby(['ID', 'FIELD']).sum()
Out[31]:
                  VALUE
ID       FIELD
12463634 E_REASON   010
         IN_SCOPE     Y
         TEST      22.2
12463635 E_REASON   020
         IN_SCOPE     N
         TEST      99.5