Pandas使用stack和pivot实现数据透视_19

Pandas使用stack和pivot实现数据透视_19_第1张图片
Pandas使用stack和pivot实现数据透视_19_第2张图片
Pandas使用stack和pivot实现数据透视_19_第3张图片
Pandas使用stack和pivot实现数据透视_19_第4张图片

import numpy as np
import pandas as pd

"""
本节主要介绍pandas使用stack和pivot实现数据透视
目的:将列式数据变成二维交叉形式,便于分析,叫做重塑或透视
1.经过统计得到多维度指标数据
2.使用unstack实现数据的二维透视
3.使用pivot实现简化透视
4.stack、unstack、pivot的语法
"""

# 一、经过统计得到多维度指标数据
"""
非常场景的统计场景,指定多个维度,计算聚合后的指标
实例:统计得到电影评分数据集,每个月份的每个分数被统计了多少次
"""
df = pd.read_csv(
    './rating.csv',
    sep='::',
    engine='python',
    header=None,
    names='UserID::MovieID::Rating::Timestamp'.split('::')
)
# 将timestamp那一列转换为时间类型
df['pdate'] = pd.to_datetime(df['timestamp'],unit='s') # unit代表转为到秒

print(df.head())
print(df.dtypes)

# 实现数据的统计
# 对两列进行分组,再选出UserID一列,再新增新的一列pv等于UserID的和。也就是评分次数
df_group = df.groupby([df['pdate'].dt.month,'rating'])['UserID'].agg(pv=np.sum)
print(df_group.head())
# 这个时候如果想实现x轴是月份,y轴是评分次数,图线为每一种评分的趋势就很难实现
# 需要将数据变换成每个评分是一列才可以实现

# 二、使用unstack实现数据的二维透视
"""
unstack主要就是将其中某一索引变成列名
目的:想要画图对比按照月份不同评分的数量趋势
"""
df_unstack = df_group.unstack()
df_unstack.plot()

# stack与unstack是互逆操作
df_stack = df_unstack.stack().head()


# 三、使用pivot简化透视
"""
pivot相当于对df使用set_index创建分层索引,然后调用unstack
"""
# 将pdate和rating两个索引列变成普通列
df_reset = df_group.reset_index()
df_pivot = df_reset.pivot('pdate','rating','pv')
df_pivot.plot()

你可能感兴趣的:(Pandas,python,python)