当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas pivot方法用法及代码示例


Pandas pivot(~)方法将输入DataFrame转换为所谓的数据透视表。请检查下面的示例以了解数据透视表是什么。

参数

1.index | stringobject | optional

将成为结果数据透视表索引的列的标签。

2. columns | stringobject

其值将成为新列标签的列的标签。

3. values | stringobjectlist | optional

其值将填充生成的数据透视表的列的标签。

警告

如果您希望聚合values(例如计算平均值、计数等),请改用 pivot_table(~)

返回值

代表数据透视表的新 DataFrame

例子

基本用法

考虑以下关于一段时间内人们身高的DataFrame:

df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160]})
df



   name   year  height
0  alex   2012   150
1  bob    2012   160
2  alex   2013   160
3  bob    2013   170
4  cathy  2013   160

创建一个数据透视表使用这个 DataFrame :

pd.pivot(df, index="name", columns="year", values="height")



year   2012   2013
name  
alex   150.0  160.0
bob    160.0  170.0
cathy  NaN    160.0

在此,请注意以下事项:

  • name 列成为新索引

  • year 列的值成为新的列标签

  • height 列的值用于填充新的 DataFrame

  • 未找到的值(例如 2012 中 Cathy 的高度)导致 NaN

多个值

考虑以下 DataFrame :

df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160], "weight":[50,60,60,70,60]})
df



   name   year  height  weight
0  alex   2012   150      50
1  bob    2012   160      60
2  alex   2013   160      60
3  bob    2013   170      70
4  cathy  2013   160      60

在这里,除了 height 列之外,我们还有一个 weight 列。

要使用这两列生成数据透视表,请传递 values 的列表,如下所示:

pd.pivot(df, index="name", columns="year", values=["height","weight"])



       height          weight
year   2012    2013    2012    2013
name    
alex   150.0   160.0   50.0    60.0
bob    160.0   170.0   60.0    70.0
cathy  NaN     160.0   NaN     60.0

处理ValueError

考虑以下 DataFrame :

df = pd.DataFrame({"name":["alex","alex","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
df



   name  year  height
0  alex  2012  150
1  alex  2012  160
2  bob   2013  160

在这里,我们有两个名为 alex 的人,他们的身高均在 2012 中获取。

创建数据透视表会产生 ValueError,如下所示:

pd.pivot(df, index="name", columns="year", values="height")



ValueError: Index contains duplicate entries, cannot reshape

为了理解为什么会发生这种情况,让我们暂时将第二个 alex 重命名为 * ,并创建数据透视表:

df = pd.DataFrame({"name":["alex","*","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
pd.pivot(df, index="name", columns="year", values="height")



year   2012    2013
name    
*      160.0   NaN
alex   150.0   NaN
bob    NaN     160.0

如果 *alex ,那么很容易看到结果索引将包含重复值,这在 Pandas 中是不希望的。这就是 ValueError 的原因。

那么,此 ValueError 的修复方法是确保新索引列中不存在重复值。您可以使用 loc iloc 等属性来更新各个条目以避免重复。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas | pivot method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。