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)
在这个例子中,我们创建了一个数据框 df
,其中有四列数据,A
表示分组键,B
表示分组键的另一部分,C
是一个类别变量,而 D
是一个值变量。我们使用 pivot_table()
函数将数据框转换为一个新的数据框 table
,其中 A
和 B
是新数据框的行索引,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'])
在上面的例子中,我们使用了 melt()
函数将列名为 time
和 count
的两列数据转换为一列数据,并添加了一个新的名称 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
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')
在上面的例子中,我们针对 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
2.3 同时进行行列转换
有时候我们需要同时进行行列转换,这种转换通常用于聚合操作,例如计算一个月份内每个客户的销售总额等等。我们可以在 pivot_table()
函数中使用 pivot_table(df, index=['商品名称'], columns=['2018-01', '2018-02'], values=['销售数量', '销售额'], aggfunc=sum)
进行一次性聚合。
3. 总结
在本文中,我们介绍了 Pandas 中的数据透视操作,并给出了相应的示例。我们了解到,数据透视是非常有用的数据重构操作,可以将数据框的行转换为列,或者将列转换为行,并汇总为新的结构体。Pandas 中的 pivot_table()
函数是实现数据透视的主要方法之一,还可以使用 melt()
函数将列转换为行,并实现更复杂的数据透视操作。希望本文能对你在 Pandas 中应用数据透视操作有所帮助。