利用Python實現資料透視表和交叉表

2021-09-09 06:49:09 字數 3805 閱讀 5925

1、透視表 pivot table

pd.pivot_table(data,values=none,index=none,columns=none,aggfunc='mean'

,fill_value=none,margins=false,dropna=true,margins_name='all')

其中,

data:dataframe物件

values:要聚合的列或列的列表

index:資料透視的index,從原始資料的列中篩選

columns:資料透視表的columns,從原始資料的列中篩選

aggfunc:用於聚合的函式,預設為numpy,mean,支援numpy計算方法

import numpy as np

import pandas as pd

date = ['2019-1-1','2019-1-2','2019-1-3']*3

date_time = pd.to_datetime(date)

df = pd.dataframe()

print('------------原資料------------')

print(df)

print('------------透視表1------------')

#也可以aggfunc='sum'

print(pd.pivot_table(df,values = 'values',index = ['date'],columns='key',aggfunc=np.sum))

print('------------透視表2------------')

#分別以date,key共同做資料透視,值為values:統計不同(date,key)情況下values的計數

#aggfunc=len(或者count):計數

print(pd.pivot_table(df,values = 'values',index = ['date','key'],aggfunc=len))

輸出結果:

------------原資料------------

date key values

0 2019-01-01 a 6.372699

1 2019-01-02 b 0.649605

2 2019-01-03 c 4.897285

3 2019-01-01 d 7.758373

4 2019-01-02 a 1.576888

5 2019-01-03 b 8.217029

6 2019-01-01 c 5.454403

7 2019-01-02 a 5.072132

8 2019-01-03 b 2.875602

------------透視表1------------

key a b c d

date

2019-01-01 6.372699 nan 5.454403 7.758373

2019-01-02 6.649020 0.649605 nan nan

2019-01-03 nan 11.092630 4.897285 nan

------------透視表2------------

values

date key

2019-01-01 a 1.0

c 1.0

d 1.0

2019-01-02 a 2.0

b 1.0

2019-01-03 b 2.0

c 1.0

2、交叉表:crosstab

預設情況下,crosstab計算因子的頻率,比如用於str的資料透視分析

pd.crosstab(index,columns,values=none,rownames=none

,colnames=none,aggfunc=none,margins=false,dropna=true,normalize=false)

import numpy as np

import pandas as pd

df = pd.dataframe()

print('------------原資料------------')

print(df)

#如果crosstab只接收兩個series,他將提供乙個頻率表

#用a的唯一值,統計b唯一值的出現次數 (a,b)= (1,3)c出現了1次 (a,b)= (2,4)出現了3次

print('------------交叉表1------------')

print(pd.crosstab(df['a'],df['b']))

print('------------交叉表2------------')

print(pd.crosstab(df['a'],df['b'],normalize=true))#以頻率的方式顯示

print('------------交叉表3------------')

print(pd.crosstab(df['a'],df['b'],values=df['c'],aggfunc=np.sum))#values:根據因子聚合的值陣列

#aggfunc:如果未傳遞values陣列,則計算頻率表,如果傳遞陣列,則按照指定計算

#這裡相當於以a和b界定分組,計算出每組中第三個系列c的值

print('------------交叉表4------------')

print(pd.crosstab(df['a'],df['b'],values=df['c'],aggfunc=np.sum,margins=true))

#margins:布林值,預設值false,新增行/列邊距(小計)

輸出結果:

------------原資料------------

a b c

0 1 3 1.0

1 2 3 1.0

2 2 4 nan

3 2 4 1.0

4 2 4 1.0

------------交叉表1------------

b 3 4

a

1 1 0

2 1 3

------------交叉表2------------

b 3 4

a

1 0.2 0.0

2 0.2 0.6

------------交叉表3------------

b 3 4

a

1 1.0 nan

2 1.0 2.0

------------交叉表4------------

b 3 4 all

a

1 1.0 nan 1.0

2 1.0 2.0 3.0

all 2.0 2.0 4.0

資料透視表

源明 資料透視表 的用法,他們總問俺 錦繡 又是那個怪怪的 資料透視表 源明 什麼怪怪的,上次不是給你說了,它的用途可大了,尤其是統計一些資料的時候,不用函式就能實現,有人從這些分析中能賺著大錢呢 錦繡 可是有點兒複雜,你知道唄,俺就奇怪你們學理科的人,寫出的東西又枯燥又難懂,俺就學不會,源明 所以...

資料透視表

寫在前面 最近給自己立下乙個任務 掌握excel中的資料透視表 vlookup,如果還有餘力可以再掌握其vba基礎。而因為已經具備程式設計基礎,所以我認為學習vba應該也不是什麼難事,前兩種的話,希望可以達到在簡歷上寫 熟練使用excel中的資料透視表 vlookup 而一點都不心虛,把能力扎扎實實...

資料透視表

恢復 ctrl y 全選 單擊左右翻頁箭頭按住shift鍵 一,透視表基本用法 選中製表單元格 插入資料透視表 拖動 月,部門,發生額 更改統計方法 單擊左上角計數項 求和,平均值,最大值 單擊右鍵 選擇值欄位數值 雙擊單元格看明細 二,更改時間單位 選中 插入 資料透視表 拖拽訂購日期 選中任意時...