当我们需要进行数据聚合和分析的时候,数据透视是非常重要的方法之一。在Python语言中,Pandas库提供了两个非常重要的方法stack和pivot,来帮助我们轻松实现数据透视。接下来,我们将会详细讲解如何使用这两个方法来实现数据透视。
1. stack方法
stack()
方法可以将DataFrame中的列转换成行,返回一个新的Series或DataFrame。
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'c'],
'B': ['x', 'y', 'z'],
'C': [1, 2, 3],
'D': [4, 5, 6]})
stacked = df.stack()
print(stacked)
上面的代码中,我们首先创建了一个DataFrame,包含了4列数据。然后使用stack()
方法将这个DataFrame中的列转换成行,并保存到stacked
变量中。最后,我们将stacked
输出到屏幕,并观察到以下输出结果:
0 A a
B x
C 1
D 4
1 A b
B y
C 2
D 5
2 A c
B z
C 3
D 6
dtype: object
可以看到,使用stack()
方法之后,原本的DataFrame被转换成了一个MultiIndex
类型的Series。其中,每个元素都被转换成了一个元组,第一个元素代表行的索引,第二个元素代表列的索引。可以使用.loc[]
方法对数据进行筛选和访问:
print(stacked.loc[(0, 'A')])
上面的代码中,我们访问了转换之后的Series中第1行第1列的元素,输出结果如下:
a
因此,通过使用stack()
方法,我们可以将DataFrame中的多个列转换成行,方便我们进行数据分析。
2. pivot方法
pivot()
方法可以将DataFrame中的行转换成列,返回一个新的DataFrame。假设我们现在有一个表格,记录了很多人在不同时间的身高和体重信息,我们想将这些数据按照时间和体重分组,统计不同时间下体重的平均值。我们可以使用如下代码实现:
import pandas as pd
import numpy as np
df = pd.DataFrame({'time': ['2017-01-01', '2017-01-01', '2017-01-01', '2017-01-02', '2017-01-02', '2017-01-02'],
'weight': [65, 60, 70, 68, 72, 75],
'height': [170, 165, 180, 173, 178, 185]})
pivoted = df.pivot(index='time', columns='weight', values='height')
print(pivoted)
上面的代码中,我们首先创建了一个包含时间、体重和身高三列数据的DataFrame。然后使用pivot()
方法将这个DataFrame中的行(时间)转换成列(体重),并将每个体重对应的身高作为对应的值,最后输出结果如下:
weight 60 65 68 70 72 75
time
2017-01-01 165 170 NaN 180.0 NaN 185.0
2017-01-02 NaN NaN 173.0 NaN 178.0 190.0
可以看到,我们得到了一个新的DataFrame,其中时间变成了行标签,体重变成了列标签,每行对应一个时间,每列对应一个体重,对应的值为对应体重的身高的平均值。因此,使用pivot()
方法可以方便地实现数据透视的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas使用stack和pivot实现数据透视的方法 - Python技术站