重塑熊猫数据框将一行反转为几列

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)

完成这项工作的任何建议。

Zer*_*ero 5

这里有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)

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
Run Code Online (Sandbox Code Playgroud)