重塑pandas数据帧将一行反转为多列

时间:2016-12-11 09:22:20

标签: python python-3.x pandas dataframe reshape

我有一个类似下面的数据框。它有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

有关完成此任务的任何建议。

2 个答案:

答案 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

3)使用groupbyunstack

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