我有一个类似下面的数据框。它有ID列,月份以及客户是否购买了特定产品。
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
有关完成此任务的任何建议。
答案 0 :(得分:4)
以下是3种重塑方式
1)使用pd.pivot
ui-bootstrap-tpls.js
2)使用pd.crosstab
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
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
答案 1 :(得分: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:索引包含重复的条目,无法重塑
使用pivot_table
。