2016-12-08 4 views
1

the structure of <code>a</code>パンダに転置のようなものの変換を行うためのエレガントな方法が速く

私はDataFrame構造を取得したい一方では次のようである:

the structure of <code>b</code>

bは、aの転置に似ています。 bへの改宗aことで 、私はコードを使用します。

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ループbaからすべての要素を取得するために2つを使用することは非常に残酷です。それは非常に遅いです。それを改善する効率的な方法がありますか?

答えて

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

リセットカラム名、plese check editが必要です。 – jezrael

+0

ありがとう!!しかし、なぜあなたはその方法をすばやく見つけることができるのですか?私は正確に私が望むAPIを見つける方法がありません... –

関連する問題