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