Pandas 如何对数据框进行透视操作

Pandas 如何对数据框进行透视操作

在本文中,我们将介绍 Pandas 中的数据透视功能,解释如何将特定的数据结构转换为我们想要的形式。数据透视(Pivot)是数据分析中非常常见且功能强大的工具,它可以将行转换为列,或者将列转换为行,并将数据聚合为新的结构体。

阅读更多:Pandas 教程

1. Pandas中的数据透视操作

数据透视在 Pandas 中可以使用 pivot_table() 函数来实现。下面是一个简单的例子:

import pandas as pd

df = pd.DataFrame({
    "A": ["foo", "foo", "foo", "bar", "bar", "bar"],
    "B": ["one", "one", "two", "two", "one", "one"],
    "C": ["x", "y", "x", "y", "x", "y"],
    "D": [1, 3, 2, 5, 4, 1]
})

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=sum)
Python

在这个例子中,我们创建了一个数据框 df,其中有四列数据,A 表示分组键,B 表示分组键的另一部分,C 是一个类别变量,而 D 是一个值变量。我们使用 pivot_table() 函数将数据框转换为一个新的数据框 table,其中 AB 是新数据框的行索引,C 是新数据框的列索引,而用于汇总的值为 D

2. 常见的数据透视操作

2.1 单列转行

有时候我们会遇到这样的情况,需要将一个或多个列转换为行。这通常是由于我们面对的数据来自于不同的源,并且由于格式或其他问题而需要进行转换。对于这种情况,我们可以使用 Pandas 中的 melt() 函数来将列转换为行。例如:

df = pd.DataFrame({'day': ['Sun','Sun','Mon','Mon'],
                   'time': [10, 14, 11, 15],
                   'count': [100, 200, 150, 100]})

result = pd.melt(df, id_vars=['day'], value_vars=['time', 'count'])
Python

在上面的例子中,我们使用了 melt() 函数将列名为 timecount 的两列数据转换为一列数据,并添加了一个新的名称 variable 来存储原始列名。结果如下:

   day variable  value
0  Sun     time     10
1  Sun     time     14
2  Mon     time     11
3  Mon     time     15
4  Sun    count    100
5  Sun    count    200
6  Mon    count    150
7  Mon    count    100
Python

2.2 多列转行

除了单列转行以外,在某些情况下,我们可能需要将多个列转换为行。例如,数据框存在多列日期,我们需要将这些日期转换为新的一列,并同时保留其它数据。我们可以使用 Pandas 中的 melt() 函数来实现这一点。例如:

df = pd.DataFrame({
    'id': ['A','B','C'],
    'date_x': ['2019-10-01','2019-10-02','2019-10-03'],
    'val_x': [1, 2, 3],
    'date_y': ['2019-10-11','2019-10-12','2019-10-13'],
    'val_y': [4, 5, 6]}
)

result = pd.melt(df, id_vars='id', value_vars=['date_x', 'val_x', 'date_y', 'val_y'],
                 var_name='variable', value_name='value')
Python

在上面的例子中,我们针对 id 列进行了多列转行,转换后每行表示一个 id 中的一个日期和值,加入了新的 variable 列用于存储原始列名。结果如下:

  id variable       value
0  A   date_x  2019-10-01
1  B   date_x  2019-10-02
2  C   date_x  2019-10-03
3  A    val_x           1
4  B    val_x           2
5  C    val_x           3
6  A   date_y  2019-10-11
7  B   date_y  2019-10-12
8  C   date_y  2019-10-13
9  A    val_y           4
10 B    val_y           5
11 C    val_y           6
Python

2.3 同时进行行列转换

有时候我们需要同时进行行列转换,这种转换通常用于聚合操作,例如计算一个月份内每个客户的销售总额等等。我们可以在 pivot_table() 函数中使用 pivot_table(df, index=['商品名称'], columns=['2018-01', '2018-02'], values=['销售数量', '销售额'], aggfunc=sum) 进行一次性聚合。

3. 总结

在本文中,我们介绍了 Pandas 中的数据透视操作,并给出了相应的示例。我们了解到,数据透视是非常有用的数据重构操作,可以将数据框的行转换为列,或者将列转换为行,并汇总为新的结构体。Pandas 中的 pivot_table() 函数是实现数据透视的主要方法之一,还可以使用 melt() 函数将列转换为行,并实现更复杂的数据透视操作。希望本文能对你在 Pandas 中应用数据透视操作有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册