pandas库中pivot_table(透视表)的通俗理解

pandas库中pivot_table(透视表)的通俗理解

      • 1、对于透视表pd.pivot_table函数的理解
      • 2、但是如果想把透视表的数据合并到原来的表格上怎么办呢?

废话不多说先看例子:
首先建立了一个DataFrame表a,赋值 前2列前3行为值2,便于后面观察。
pandas库中pivot_table(透视表)的通俗理解_第1张图片

1、对于透视表pd.pivot_table函数的理解

这个函数参数有:
要透视的表、
透视表的索引(index)、
想要看的值(values)、
相同索引的值如何处理(aggfunc)。

这几个参数是最重要的。因为要用表指定的index对其索引,难免出现相同的索引(比如图中的2值),于是aggfunc存在的目的就是如何合并这些行(对于这些行,values值应该如何合并)。

b=pd.pivot_table(a,index=['a','b'],values='e',aggfunc=np.mean)

我们执行完这句话,看看结果是什么(图中应该是中括号)
pandas库中pivot_table(透视表)的通俗理解_第2张图片

可以看到,具有相同索引的两行合并了起来,而合并出的values值取了平均值(因为aggfunc指定的函数是np.mean
aggfunc是一个函数变量,或者一串“能表明计算方式的字符串”字符串。

上文aggfunc=np.mean这个写法等价于aggfunc=’mean’
aggfunc还有如下:

函数名 说明
count 分组中非NA值的数量
sum 非NA值的和
mean 非NA值的平均值
median 非NA值的算术中位数
std、var 无偏(分母为n-1)标准差和方差
min、max 非NA值的最小值和最大值
prod 非NA值的积
first、last 第一个或最后一个非NA值

透视表的基本用法就说完了。

2、但是如果想把透视表的数据合并到原来的表格上怎么办呢?

回顾一下我们生成的表b为:
pandas库中pivot_table(透视表)的通俗理解_第3张图片

c=a.copy()先复制一下表a(非必要步骤)
执行:

pd.merge(c,b,on=['a','b'],how='left')

原c:
pandas库中pivot_table(透视表)的通俗理解_第4张图片

原b:
pandas库中pivot_table(透视表)的通俗理解_第5张图片

merge合并 执行结果:
pandas库中pivot_table(透视表)的通俗理解_第6张图片

可以看到,e_y是我们新合并的一列,因为列标重名了,于是函数自动帮我们重命名成了e_xe_y
可以看到原本b中的e只有3行,但是合并后成了5行,这就是pd.merge函数中on参数的作用。
可以通俗的解释为:on为index ,将要两个列表聚合。有点像透视表函数的逆过程。

how参数则有‘left’, ‘right’, ‘outer’, ‘inner’四个取值。
默认how=’inner’。

inner是取交集(合并后的结果只有两个表格都有on(index)的值的行),
outer取并集(以此类推),
left则是“在保留左表全部值的情况下,把右表的值填充合并到左表中”,本例即是把右表b的值填充到了左表中。
right以此类推。

如果我们不想函数帮我们自动命名成e_xe_y这种值,则在合并前需要先重命名。
DataFrame.rename方法:

b=b.rename(columns={’e’:’average’})

这样就把e重命名为了averagerename函数的参数columns应该得到一个字典,该字典应该是{旧名字:新名字,旧名字:新名字}这样的形式。
pandas库中pivot_table(透视表)的通俗理解_第7张图片

b=b.reset_index()这样把averageab的索引的优先级降到同一水平。这样b就是一个很普通的表格了。
再合并:
pandas库中pivot_table(透视表)的通俗理解_第8张图片

这样子就不会出现自动重命名的现象了

如果觉得本文对您有帮助记得点赞收藏关注哦~

你可能感兴趣的:(pivot_table,merge,大数据,pandas,numpy,pivot)