透視表pivot_table和交叉表crosstab

i see the future發表於2020-10-03

本文介紹透視表pivot_table和交叉表crosstab。

import pandas as pd
import numpy as np
%matplotlib inline
%matplotlib notebook
import matplotlib.pyplot as plt

1.透視表pivot table

# 匯入資料
tips = pd.read_csv('data/tips/tips2.csv')
tips['tip_pct'] = tips['tip']/tips['total_bill']
print(tips.head())
#   total_bill   tip     sex smoker  day    time  size   tip_pct
#0       16.99  1.01  Female     No  Sun  Dinner     2  0.059447
#1       10.34  1.66    Male     No  Sun  Dinner     3  0.160542
#2       21.01  3.50  Female     No  Sun  Dinner     3  0.166587
#3       23.68  3.31    Male     No  Sun  Dinner     2  0.139780
#4       24.59  3.61  Female     No  Sun  Dinner     4  0.146808

1.1 製作資料透視表方法1 : groupby + 聚合函式

tips.groupby(['sex','smoker']).mean()

在這裡插入圖片描述
.

1.2 製作資料透視表方法2 :pivot_table

# pivot_table1:整個dataframe
tips.pivot_table(index=['sex','smoker'])

在這裡插入圖片描述
.

ivot_table2:dataframe中一部分資料
tips.pivot_table(['tip_pct','size'],index=['sex','day'],columns='smoker')

在這裡插入圖片描述
.

# pivot_table3:傳入小計margins=True
tips.pivot_table(['tip_pct','size'],index=['sex','day'],columns='smoker',margins=True)

在這裡插入圖片描述
.

# pivot_table4:傳入其他聚合函式aggfunc
tips.pivot_table('tip_pct',index=['sex','smoker'],columns='day',aggfunc=len,margins=True)

在這裡插入圖片描述
.

# pivot_table5:fill_value
tips.pivot_table('size',index=['time','sex','smoker'],columns='day',aggfunc=np.sum,fill_value=0)

在這裡插入圖片描述
.

2.交叉表crosstab

# 交叉表1
data=pd.DataFrame({'sample':[1,2,3,4,5,6,7,8,9,10],
                   'Gender': ['Female','Male','Female','Male','Male','Male','Female','Female','Male','Female'],
                  'Handedness':['Right-handed','Left-handed','Right-handed','Right-handed','Left-handed','Right-handed','Right-handed','Left-handed','Right-handed','Right-handed']})
data
#   sample  Gender    Handedness
#0       1  Female  Right-handed
#1       2    Male   Left-handed
#2       3  Female  Right-handed
#3       4    Male  Right-handed
#4       5    Male   Left-handed
#5       6    Male  Right-handed
#6       7  Female  Right-handed
#7       8  Female   Left-handed
#8       9    Male  Right-handed
#9      10  Female  Right-handed

2.1 用groupby製作出crosstab

# 用groupby製作出crosstab
data.groupby(['Gender','Handedness']).count().unstack()

在這裡插入圖片描述
.

2.2 用pivot_table製作出crosstab

# 用pivot_table製作出crosstab
data.pivot_table('sample',index=['Gender'],columns='Handedness',aggfunc='count',margins=True)

在這裡插入圖片描述
.

2.3 crosstab函式

# crosstab1
pd.crosstab(data.Gender,data.Handedness,margins=True)

在這裡插入圖片描述
.

# crosstab2
pd.crosstab([tips.time,tips.day],tips.smoker,margins=True)

在這裡插入圖片描述

相關文章