2017-05-03 12 views
2

重複する値を持つデータフレームを1つの列にピボットして、関連する値を新しい列に公開する場合は、下の例のようにします。パンダのドキュメントから、私は...このことからこれにパンダ:重複値を使用したピボット

name car model 
rob mazda 626 
rob bmw 328 
james audi a4 
james VW  golf 
tom audi a6 
tom ford focus 

を行くためにどのようにうまくいかないことができます...

name car_1 model_1 car_2 model_2 
rob mazda 626  bmw 328 
james audi a4  VW  golf 
tom audi a6  ford focus 

答えて

3
x = df.groupby('name')['car','model'] \ 
     .apply(lambda x: pd.DataFrame(x.values.tolist(), 
      columns=['car','model'])) \ 
     .unstack() 
x.columns = ['{0[0]}_{0[1]}'.format(tup) for tup in x.columns] 

結果:

In [152]: x 
Out[152]: 
     car_0 car_1 model_0 model_1 
name 
james audi VW  a4 golf 
rob mazda bmw  626  328 
tom  audi ford  a6 focus 

列の並べ替え方法:

In [157]: x.loc[:, x.columns.str[::-1].sort_values().str[::-1]] 
Out[157]: 
     model_0 car_0 model_1 car_1 
name 
james  a4 audi golf VW 
rob  626 mazda  328 bmw 
tom  a6 audi focus ford 
1

我々はgroupbycumcount

i = df.groupby('name').cumcount() + 1 
df.set_index(['name', i2]).unstack() 

     car  model  
      1  2  1  2 
name       
james audi VW a4 golf 
rob mazda bmw 626 328 
tom  audi ford a6 focus 

を使用してインデックスを設定することができそれともpd.MultiIndex

i = df.groupby('name').cumcount() + 1 
d1 = df.set_index(['name', i2]).unstack().sort_index(1, 1) 
d1.columns = d1.columns.to_series().map('{0[0]}_{0[1]}'.format) 
d1 


     car_1 model_1 car_2 model_2 
name        
james audi  a4 VW golf 
rob mazda  626 bmw  328 
tom  audi  a6 ford focus 
を折りたたむことができ
関連する問題