一行代码制作数据分析交叉表,太便捷了
The following article is from 关于数据分析与可视化 Author 俊欣
Pandas模块中的pivot_table()函数可以用来制作数据透视表,今天小编来介绍一下Pandas模块中的另外一个函数corsstab(),我们可以通过调用该函数来制作交叉表,下面就来看看其中的主要流程和步骤吧。模块导入和数据读取
import pandas as pd
def load_data():
return pd.read_csv('coffee_sales.csv', parse_dates=['order_date'])
df = load_data()
df.head()
牛刀小试
DataFrame,新数据的行和列交叉的部分值为其组合在原数据中的数量,我们先来看一个简单的例子,代码如下pd.crosstab(index = df['region'], columns = df['product_category'])
df[(df["region"] == "Central")&(df["product_category"] == "Tea")].shape[0]
336
rownames参数以及colnames参数,代码如下pd.crosstab(
index = df['region'],
columns = df['product_category'],
rownames=['US Region'],
colnames=['Product Category']
)
pd.crosstab(
index = df['region'],
columns = [df['product_category'], df['market']]
)
pd.crosstab(
index = df['region'],
columns = [df['product_category'], df['market']],
rownames=['US Region'],
colnames=['Product Category', 'Market']
)
DataFrame数据集当中的列有两层,最上面的是咖啡的种类,然后紧接着第二层的便是不同的市场,当然我们也可以在行方向上添加多个层次的索引,代码如下pd.crosstab(
index = [df['region'], df['market']],
columns = df['product_category']
)
进阶的操作
pd.pivot_table()函数一样,我们也可以通过调用当中的margin参数来给整合出来的数据做一个加总,代码如下pd.crosstab(index = df['region'],
columns = df['product_category'],
margins = True)
pd.crosstab(
index = df['region'],
columns = df['product_category'],
margins = True,
margins_name = 'Subtotals'
)
normalize用来将所有值除以值的总和进行归一化pd.crosstab(index = df['region'],
columns = df['product_category'],
normalize = True)
pd.crosstab(
index = df['region'],
columns = df['product_category'],
normalize = True
).style.format('{:.2%}')
margin参数相结合来使用的话,将所有的结果汇总到一起等于100%,代码如下pd.crosstab(
index = df['region'],
columns = df['product_category'],
margins = True,
normalize = True
).style.format('{:.2%}')
进一步衍生
values以及aggfunc两参数,其中aggfunc参数具体指的是指定聚合函数,例如平均数、求和以及中位数等统计方法,对value参数指定的连续性变量的列进行计算,df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4248 entries, 0 to 4247
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 order_date 4248 non-null datetime64[ns]
1 market 4248 non-null object
2 region 4248 non-null object
3 product_category 4248 non-null object
4 product 4248 non-null object
5 cost 4248 non-null int64
6 inventory 4248 non-null int64
7 net_profit 4248 non-null int64
8 sales 4248 non-null int64
dtypes: datetime64[ns](1), int64(4), object(4)
memory usage: 298.8+ KB
pd.crosstab(
index = df['region'],
columns = df['product_category'],
values = df['cost'],
aggfunc = 'mean'
)
pd.crosstab(
index = df['region'],
columns = df['product_category'],
values = df['cost'],
aggfunc = 'mean'
).round(2)
pd.crosstab(
index = df['region'],
columns = df['product_category'],
values = df['cost'],
aggfunc = 'mean',
).fillna(0)
往期推荐 1、通透理解Python函数传参机制! 2、这个Python神器,能让你摸半天鱼! 3、Python自动化监控文件夹完成服务部署! 4、轻松拿下19个Sklearn中超实用的隐藏功能 5、Python 获取线程返回值的三种方式 点击关注公众号,阅读更多精彩内容