Pandas玩转数据透视表,用它就够了!
对于数据透视表,相信对于 Excel 比较熟悉的小伙伴都知道如何使用它,并了解它的强大之处,而在pandas
中要实现数据透视就要用到pivot_table
了。
导入示例数据
首先导入演示的数据集。
import pandas as pd
df = pd.read_csv('销售目标.csv')
df.head()
![f6d04357eacea44a2b716ece78622f92.webp](https://filescdn.proginn.com/01caaa75c2be447b8a41c773397b55a6/f6d04357eacea44a2b716ece78622f92.webp)
参数说明
![3305ed86fc8c00fafe51bb6d3b38a25b.webp](https://filescdn.proginn.com/8cd3b67add916af042e94ae1e38e4c76/3305ed86fc8c00fafe51bb6d3b38a25b.webp)
主要参数:
data
:待操作的 DataFramevalues
:被聚合操作的列,可选项index
:行分组键,作为结果 DataFrame 的行索引columns
:列分组键,作为结果 DataFrame 的列索引aggfunc
:聚合函数/函数列表,默认 numpy.mean 这里要注意如果 aggfunc 中存在函数列表,则返回的 DataFrame 中会显示函数名称fill_value
:默认 None,可设定缺省值dropna
:默认 True,如果列的所有值都是 NaN,将被删除;False 则保留margins
:默认 False,设置为 True 可以添加行/列的总计margins_name
:默认显示 'ALL',当margins = True
时,可以设定 margins 行/列的名称
常用操作
使用pivot_table
时必须要指定index
,因为计算时要根据index
进行聚合。
pd.pivot_table(df.head(20),
index='订单日期',
aggfunc=np.sum)
![c489dedd020be74ce0e77361a0439aa0.webp](https://filescdn.proginn.com/b43faca00b820bacef0b92bb0178815a/c489dedd020be74ce0e77361a0439aa0.webp)
通过指定value
来选择被聚合的列。
pd.pivot_table(df.head(20),
values='销售目标',
index='订单日期',
aggfunc=np.sum)
![6b1a4903e8be6e5c3c56412fa5f68427.webp](https://filescdn.proginn.com/b8455d2ab0b0179f0dcc206a2966672f/6b1a4903e8be6e5c3c56412fa5f68427.webp)
当只指定index
进行聚合时,其实用groupby
可以实现同样的效果。
df.head(20).groupby(['订单日期'])['销售目标'].sum().reset_index()
添加columns
参数,对列分组。
pd.pivot_table(df.head(10),
values='销售目标',
index=['订单日期', '类别'],
columns='细分',
aggfunc=np.sum)
![dba8b29a3d8211614d6047a4e5fa352e.webp](https://filescdn.proginn.com/da0fe12b9f89815e94691c978991e4d7/dba8b29a3d8211614d6047a4e5fa352e.webp)
对于上面结果中的空值,使用fill_value
参数统一填充为0
pd.pivot_table(df.head(10),
values='销售目标',
index=['订单日期', '类别'],
columns=['细分'],
aggfunc=np.sum,
fill_value=0)
![aeaf76904950e3a6e5dddb511003defd.webp](https://filescdn.proginn.com/350f05f32f33c53e52177d44c212dd35/aeaf76904950e3a6e5dddb511003defd.webp)
现在按年份来统计销售数据,注意此时的aggfunc
参数,当参数值包含列表时,在结果DataFrame
中就会显示函数名称。
pd.pivot_table(df,
values='销售目标',
index=['年份', '类别'],
columns='细分',
aggfunc=[np.sum])
![93673c6dbc556f371f9ecd0f980542e7.webp](https://filescdn.proginn.com/cce013cd1a718ae6a1e9b9902f0d268d/93673c6dbc556f371f9ecd0f980542e7.webp)
如果需要添加合计列,只需指定margins=True
即可,同时根据需要指定合计名称。
pd.pivot_table(df,
values='销售目标',
index=['年份', '类别'],
columns='细分',
aggfunc=np.sum,
margins=True,
margins_name='合计')
![e01e764465cb76e60ce3d7d502ddc919.webp](https://filescdn.proginn.com/26afd4484e3b763c87a659cf2549954e/e01e764465cb76e60ce3d7d502ddc919.webp)
当然与groupby
类似,对于计算函数我们可以同时指定多种方式。
pd.pivot_table(df,
values='销售目标',
index=['年份', '类别'],
columns=['细分'],
aggfunc={'销售目标': [max, np.sum]},
fill_value=0)
![977fac8eda2b1cdaaf6419f7d333a7e5.webp](https://filescdn.proginn.com/8151793ce09e4df27f7aa1fb23fc9f85/977fac8eda2b1cdaaf6419f7d333a7e5.webp)
以上就是pandas
数据透视的常用操作了,使用起来也是十分简单,大家可以自己练习一下,如果文章对你有帮助,请点赞支持一下哦!
你的每一个点赞、在看,每一条留言,每一次转发,都对我很重要,感谢支持。
好的,那么下期见,我是爱猫爱技术,更爱思思的老表⁽⁽ଘ( ˙꒳˙ )ଓ⁾⁾
近期阅读学习推荐:
如何找到我:
评论