2016-12-08 59 views
1

我有一個pandas.Dataframe稱爲a和結構如下: the structure of <code>a</code>一種優雅的方式做的像轉轉型熊貓更快

,而我想要得到的DataFrame結構是這樣的:

the structure of <code>b</code>

其中b就像是a轉置。 通過轉換ab,我使用的代碼:

id_uni = a['id'].unique() 
b = pd.DataFrame(columns=['id']+[str(i) for i in range(1,4)]) 
b['id'] = id_uni 

for i in id_uni: 
    for j in range(7): 
     ind = (a['id'] == i) & (a['w'] == j) 
     med = a.loc[ind, 't'].values 
     if med: 
      b.loc[b['id'] == i, str(j)] = med[0] 
     else: 
      b.loc[b['id'] == i, str(j)] = 0 

的方法是很殘酷的,我只用兩個for循環擺脫a所有元素b。而且速度很慢。你有沒有一種有效的方法來改進它?

回答

2

您可以使用pivot

print (df.pivot(index='id', columns='w', values='t')) 
w 1 2 3 
id    
0 54 147 12 
1 1 0 1 

df1 = df.pivot(index='id', columns='w', values='t').reset_index() 
df1.columns.name=None 
print (df1) 
    id 1 2 3 
0 0 54 147 12 
1 1 1 0 1 
+0

哇!有用。然後我使用'.reset_index(inplace = True)',但名稱'w'仍然在索引中,我該如何擺脫它? –

+0

您需要重置列名稱,請檢查編輯。 – jezrael

+0

謝謝!但是,你能和我分享爲什麼你能很快找到方法嗎?我沒有如何找到我想要的確切API ... –

相關問題