2016-12-11 9 views
2

私は以下のようなデータフレームを持っています。 ID列、月、および顧客が特定の製品を購入したかどうかを示します。reshape pandasデータフレームが1行を複数の列に逆転させる

ID  Date  Buy_Or_Not 
1  2016-01  1 
1  2016-02  1 
1  2016-03  0 
1  2016-04  1 
1  2016-05  0 
2  2016-01  1 
2  2016-02  1 
2  2016-03  1 
2  2016-04  1 
2  2016-05  0 

私はこのように見せています。

ID  2016-01 2016-02 2016-03 2016-04 2016-05 
1  1  1  0  1  0 
2  1  1  1  1  0 

これを達成するためのアドバイス。

答えて

4

ここで使用pd.pivot

In [58]: df.pivot(index='ID', columns='Date', values='Buy_Or_Not') 
Out[58]: 
Date 2016-01 2016-02 2016-03 2016-04 2016-05 
ID 
1   1  1  0  1  0 
2   1  1  1  1  0 

2)を使用して

1)を再形成する3つの方法であるgroupbyunstack

In [60]: df.groupby(['ID', 'Date']).sum().unstack('Date') 
Out[60]: 
    Buy_Or_Not 
Date 2016-01 2016-02 2016-03 2016-04 2016-05 
ID 
1    1  1  0  1  0 
2    1  1  1  1  0 
を使用 pd.crosstab

In [59]: pd.crosstab(df['ID'], df['Date'], df['Buy_Or_Not'], aggfunc=sum) 
Out[59]: 
Date 2016-01 2016-02 2016-03 2016-04 2016-05 
ID 
1   1  1  0  1  0 
2   1  1  1  1  0 

3)

1

使用pivot

df = df.pivot(index='ID', columns='Date', values='Buy_Or_Not') 
print (df) 
Date 2016-01 2016-02 2016-03 2016-04 2016-05 
ID            
1   1  1  0  1  0 
2   1  1  1  1  0 

の場合のようなエラー:

ValueError: Index contains duplicate entries, cannot reshape

使用pivot_table

関連する問題