内容:
·分组表
·透视表
·交叉表
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
heroes = pd.read_excel("C:/Users/YHT/Desktop/王者荣耀.xlsx", index_col=0, header=0)
print(heroes)
print()
运行结果:
【分组表】
(得到分组对象)
得到分组对象函数:.groupby()函数,传入参数为索引
"""得到分组对象"""
# 根据"攻击方式"分组,产生一个分组对象
group_things = heroes.groupby("攻击方式")
print(group_things)
print()
# 分组之后一定是聚合
# 查看分组对象的信息.group函数,如下可查看分组之后的信息
print(group_things.groups)
print()
运行结果:
(聚合1)
.聚合函数
"""聚合"""
# 直接对分组之后的结果进行聚合,此处得到最大值
things = group_things.max()
print(things)
print()
# 如果只关注血量、分路这两列,则可以进行如下操作:
things0 = group_things[["血量", "分路"]].max()
print(things0)
print()
运行结果:
(聚合2)
分别对不同的列,做不同的聚合运算,可以使用.agg()函数,传入参数为字典
字典的key:分组之后的列索引
字典的value:聚合函数名(对某一列元素进行该种聚合运算)
# 分别对不同的列,做不同的聚合运算,可以使用.agg()函数,传入参数为一个字典
# 字典的key:分组之后的列索引
# 字典的value:聚合函数名
things1 = group_things.agg({"血量": "min", "防御": "mean"})
print(things1)
print()
运行结果:
(将聚合结果和原表格合并)
"""将聚合之后的结果与原表格结合"""
# 得到有平均值组成的Series数组
num = heroes.groupby("攻击方式")["攻击"].mean()
print(num)
# 将其转换为DataFrame数组
df_mean = DataFrame(data=num)
print(df_mean)
# 将两个DataFrame数组合并在一起
add_all = pd.merge(heroes, df_mean, left_on="攻击方式", right_index=True, suffixes=("", "-平均攻击"))
print(add_all)
print()
运行结果:
【透视表】
某两个字段之间的交叉关系
多分组表,使用pd.pivot_table()函数就可以构成透视表
data=目标表
value=某两个字段将要根据value进行聚合运算
index=交叉表的行索引
columns=交叉表的列索引
aggfunc=聚合运算名
"""透视表"""
# 某两个字段之间的交叉关系
# 多分组表,使用pd.pivot_table()函数就可以构成透视表
# data=目标表
# value=某两个字段将要根据value进行聚合运算
# index=交叉表的行索引
# columns=交叉表的列索引
# aggfunc=聚合运算名
return_things = pd.pivot_table(data=heroes,
values="攻击",
index="攻击方式",
columns="分路",
aggfunc="mean")
print(return_things)
print()
运行结果:
【交叉表】
交叉表是一种用于计算分组频率的特殊透视表
透视表可以通过data传入参数,来直接指定数据源,但交叉表并不能直接指定数据源
pd.crosstab()函数
传入参数:
index=数据源["索引"]
column=数据源["索引"]
"""交叉表"""
# 交叉表是一种用于计算分组频率的特殊透视表
# 透视表可以通过data传入参数,来直接指定数据源,但交叉表并不能直接指定数据源
return_things = pd.crosstab(index=heroes["攻击方式"], columns=heroes["分路"])
print(return_things)
运行结果: