2017-08-10 235 views
0

我的數據幀目前的樣子:樞軸行

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 

請指教。謝謝!

+0

我想可能你想要的是'pivot'而不是'pivot_table'。 – Ajean

+0

只有他們做出非唯一索引。我只是試了一下,數據透視工作正常。 – Ajean

回答

1

使用pivotunstack

df = df.pivot(index = "ID", columns = "FIELD", values = "VALUE") 
print (df) 
FIELD E_REASON IN_SCOPE TEST 
ID        
12463634  010  Y 22.2 
12463635  020  N 99.5 

df = df.set_index(['ID', 'FIELD'])['VALUE'].unstack() 
print (df) 
FIELD E_REASON IN_SCOPE TEST 
ID        
12463634  010  Y 22.2 
12463635  020  N 99.5 

如果重複需要pivot_table一些聚合函數 - 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 = 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 
+1

樞軸工作得很好 - 謝謝! – kbball

0

另一種選擇是像做:

df.groupby(['ID', 'FIELD']).sum().unstack() 

這樣你就不會失去標籤'VALUES'

說明

可以groupbysum(),這將給你

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將最後索引的行移動到列