pandas.pivot#

pandas.pivot(data, *, columns, index=<no_default>, values=<no_default>)[源代码][源代码]#

返回按给定索引/列值组织的重塑DataFrame。

重塑数据(生成一个“透视”表)基于列值。使用指定 index / columns 中的唯一值来形成结果 DataFrame 的轴。此函数不支持数据聚合,多个值将导致列中出现 MultiIndex。更多关于重塑的信息请参见 用户指南

参数:
数据DataFrame

输入 pandas DataFrame 对象。

str 或对象或 str 列表

用于创建新框架列的列。

索引str 或对象或 str 列表,可选

用于创建新框架索引的列。如果未指定,则使用现有索引。

str, 对象 或 前述内容的列表,可选

用于填充新框架值的列。如果未指定,将使用所有剩余列,结果将具有层次索引的列。

返回:
DataFrame

返回重塑后的 DataFrame。

引发:
ValueError:

当有任何 index, columns 组合具有多个值时。DataFrame.pivot_table 当你需要聚合时。

参见

DataFrame.pivot_table

可以处理一个索引/列对中重复值的枢轴泛化。

DataFrame.unstack

基于索引值而不是列进行透视。

wide_to_long

宽面板转换为长格式。不如melt灵活,但比melt更用户友好。

备注

对于更精细的控制,请参阅层次索引文档以及相关的 stack/unstack 方法。

更多示例请参考 用户指南

示例

>>> df = pd.DataFrame(
...     {
...         "foo": ["one", "one", "one", "two", "two", "two"],
...         "bar": ["A", "B", "C", "A", "B", "C"],
...         "baz": [1, 2, 3, 4, 5, 6],
...         "zoo": ["x", "y", "z", "q", "w", "t"],
...     }
... )
>>> df
    foo   bar  baz  zoo
0   one   A    1    x
1   one   B    2    y
2   one   C    3    z
3   two   A    4    q
4   two   B    5    w
5   two   C    6    t
>>> df.pivot(index="foo", columns="bar", values="baz")
bar  A   B   C
foo
one  1   2   3
two  4   5   6
>>> df.pivot(index="foo", columns="bar")["baz"]
bar  A   B   C
foo
one  1   2   3
two  4   5   6
>>> df.pivot(index="foo", columns="bar", values=["baz", "zoo"])
      baz       zoo
bar   A  B  C   A  B  C
foo
one   1  2  3   x  y  z
two   4  5  6   q  w  t

你也可以分配一个列名列表或一个索引名列表。

>>> df = pd.DataFrame(
...     {
...         "lev1": [1, 1, 1, 2, 2, 2],
...         "lev2": [1, 1, 2, 1, 1, 2],
...         "lev3": [1, 2, 1, 2, 1, 2],
...         "lev4": [1, 2, 3, 4, 5, 6],
...         "values": [0, 1, 2, 3, 4, 5],
...     }
... )
>>> df
    lev1 lev2 lev3 lev4 values
0   1    1    1    1    0
1   1    1    2    2    1
2   1    2    1    3    2
3   2    1    2    4    3
4   2    1    1    5    4
5   2    2    2    6    5
>>> df.pivot(index="lev1", columns=["lev2", "lev3"], values="values")
lev2    1         2
lev3    1    2    1    2
lev1
1     0.0  1.0  2.0  NaN
2     4.0  3.0  NaN  5.0
>>> df.pivot(index=["lev1", "lev2"], columns=["lev3"], values="values")
      lev3    1    2
lev1  lev2
   1     1  0.0  1.0
         2  2.0  NaN
   2     1  4.0  3.0
         2  NaN  5.0

如果存在任何重复项,则会引发 ValueError。

>>> df = pd.DataFrame(
...     {
...         "foo": ["one", "one", "two", "two"],
...         "bar": ["A", "A", "B", "C"],
...         "baz": [1, 2, 3, 4],
...     }
... )
>>> df
   foo bar  baz
0  one   A    1
1  one   A    2
2  two   B    3
3  two   C    4

请注意,对于我们的 indexcolumns 参数,前两行是相同的。

>>> df.pivot(index="foo", columns="bar", values="baz")
Traceback (most recent call last):
   ...
ValueError: Index contains duplicate entries, cannot reshape