2017-03-07 2 views
1

に私のCSVは、次のようになります。パンダピボット列

"a","b","c","d" 
1, "x", 1, 1 
1, "y", 2, 2 

と私はピボットでそれを試してみましたが、アンスタックしまし

"a", "x_c", "y_c", "x_d", "y_d" 
1, 1, 2, 1, 2 

に列「B」に基づいて、それを変換します。パンダには欠点はありますか?

編集:私は複数の列を持っているので、私は、接尾辞/プレフィックス

答えて

5

使用pivot_tableを追加する必要があります。

df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean) 
#Multiindex to columns 
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0])) 
df = df.reset_index() 
print (df) 
    a x_c y_c x_d y_d 
0 1 1 2 1 2 

また重複した場合、その後、aggfuncが適用されます。

print (df) 
    a b c d 
0 1 x 1 1 <-duplicates for 1, x 
1 1 y 2 2 
2 1 x 4 2 <-duplicates for 1, x 
3 2 y 2 3 


df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean) 
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0])) 
df = df.reset_index() 
print (df) 
    a x_c y_c x_d y_d 
0 1 2.5 2.0 1.5 2.0 <-x_c, x_d aggregated mean 
1 2 NaN 2.0 NaN 3.0