Nat*_*bsi 2 python reshape dataframe python-3.x pandas
我有一个如下所示的数据框。它包含 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
Run Code Online (Sandbox Code Playgroud)
我想把它改造成这个样子。
ID 2016-01 2016-02 2016-03 2016-04 2016-05
1 1 1 0 1 0
2 1 1 1 1 0
Run Code Online (Sandbox Code Playgroud)
完成这项工作的任何建议。
这里有3种重塑方式
1) 使用 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
Run Code Online (Sandbox Code Playgroud)
2) 使用 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)