天天看點

Pandas 一文看懂透視表pivot_table

在學習pandas的時候,發現了一個統計資料的神奇pivot_table,資料透視表,是以根據知乎上的一篇文章在這裡整理一下pivot_table如何使用?

分為下面幾個問題:

  1. 什麼是透視表?詳見百科
透視表是一種可以對資料動态排布并且分類彙總的表格格式。或許大多數人都在Excel使用過資料透視表(如下圖),也體會到它的強大功能,而在pandas中它被稱作pivot_table。
Pandas 一文看懂透視表pivot_table

2. 為什麼要使用透視表?

  • 靈活性高,可以随意定制你的分析計算要求
  • 脈絡清晰易于了解資料
  • 操作性強,報表神器
  1. 如何使用透視表

    首先讀取資料,本文将火箭隊當家吉祥物James_Harden本賽季比賽資料作為資料集進行講解

import pandas as pd
import numpy as np
df = pd.read_csv('h:/James_Harden.csv',encoding='utf8')
df.tail()
           
Pandas 一文看懂透視表pivot_table

首先,說一下pivot_table的函數原型如下:

pandas.pivot_table - pandas 0.21.0 documentation

pivot_table(data, values=None, index=None, columns=None,aggfunc=‘mean’, fill_value=None, margins=False, dropna=True, margins_name=‘All’)

pivot_table有四個最重要的參數index、values、columns、aggfunc,本文以這四個參數為中心講解pivot操作是如何進行。

Index

每個pivot_table必須擁有一個index,如果想檢視哈登對陣每個隊伍的得分,首先我們将對手設定為index:

Pandas 一文看懂透視表pivot_table

對手成為了第一層索引,還想看看對陣同一對手在不同主客場下的資料,試着将對手與勝負與主客場都設定為index

Pandas 一文看懂透視表pivot_table

試着交換下它們的順序,資料結果一樣:

Pandas 一文看懂透視表pivot_table

看完上面幾個操作,Index就是層次字段,要通過透視表擷取什麼資訊就按照相應的順序設定字段,是以在進行pivot之前你也需要足夠了解你的資料。

Values

通過上面的操作,我們擷取了james harden在對陣對手時的所有資料,而Values可以對需要的計算資料進行篩選,如果我們隻需要james harden在主客場和不同勝負情況下的得分、籃闆與助攻三項資料:

Pandas 一文看懂透視表pivot_table

Aggfunc

aggfunc參數可以設定我們對資料聚合時進行的函數操作。

當我們未設定aggfunc時,它預設aggfunc='mean’計算均值。我們還想要獲得james harden在主客場和不同勝負情況下的總得分、總籃闆、總助攻時:

Pandas 一文看懂透視表pivot_table

Columns

Columns類似Index可以設定列層次字段,它不是一個必要參數,作為一種分割資料的可選方式。

#fill_value填充空值,margins=True進行彙總
pd.pivot_table(df,index=[u'主客場'],columns=[u'對手'],values=[u'得分'],aggfunc=[np.sum],fill_value=0,margins=1)

           
Pandas 一文看懂透視表pivot_table
Pandas 一文看懂透視表pivot_table

pivot_table vs. groupby

你應該了解了pivot_table的用法?是不是在哪見過?

對,Groupby!

pd.pivot_table(df,index=[字段1],values=[字段2],aggfunc=[函數],fill_value=0)

df.groupby([字段1])[字段2].agg(函數).fillna(0)

上面兩個函數完全等價,pivot_table仿佛是加入了columns與margin功能的groupby函數,比groupby更加靈活。

query

當表格生成後如何查詢某一項資料呢?

ex.根據上表查詢哈登對陣灰熊時的資料

Pandas 一文看懂透視表pivot_table

Cheat Sheet

Pandas 一文看懂透視表pivot_table

詳情參見原文位址:

https://zhuanlan.zhihu.com/p/31952948