pandas.DataFrame.pivot#

DataFrame.pivot(index=None, columns=None, values=None)[源代码]#

返回按给定索引/列值组织的整形DataFrame。

根据列值重塑数据(生成“数据透视表”)。使用指定的唯一值 index / columns 以形成结果DataFrame的轴。此函数不支持数据聚合,多个值将导致列中有多个索引。请参阅 User Guide 获取有关重塑的更多信息。

参数
index字符串或对象或字符串列表,可选

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

在 1.1.0 版更改: 也接受索引名称列表。

columns字符串、对象或字符串列表

用于生成新框架的柱的柱。

在 1.1.0 版更改: 也接受列名列表。

values字符串、对象或以前可选的

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

退货
DataFrame

返回整形后的DataFrame。

加薪
ValueError:

如果有的话, indexcolumns 具有多个值的组合。 DataFrame.pivot_table 当您需要聚合时。

参见

DataFrame.pivot_table

可以处理一个索引/列对的重复值的透视表的泛化。

DataFrame.unstack

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

wide_to_long

宽面板到长格式。比熔化更不灵活,但更方便用户使用。

注意事项

有关更精细的控制,请参阅分层索引文档以及相关的堆栈/取消堆栈方法。

参考文献 the user guide 查看更多示例。

示例

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