Pandas_stack和pivot实现数据透视
作者:互联网
"""
将列式数据变成二维交叉形式,便于分析,叫做重塑或者透视
1)经过统计得到多维度指标数据
2)使用unstack实现数据二维透视
3)使用pivot简化透视
4)stack,unstack,pivot的语法
"""
import pandas as pd
import numpy as np
df = pd.read_csv(
'data/ratings.csv',
sep=',',
engine='python',
names='UserID,MovieID,Rating,Timestamp'.split(',')
)
df.head()
# UserID MovieID Rating Timestamp
# 0 1 1 4.0 964982703
# 1 1 3 4.0 964984247
# 2 2 6 4.0 964982224
# 3 2 47 5.0 964983815
# 4 1 50 5.0 964982931
# timestamp为秒 所以unit为s 这一列数据转换为datetime格式
df['pdate'] = pd.to_datetime(df['Timestamp'], unit='s')
df.head()
# UserID MovieID Rating Timestamp pdate
# 0 1 1 4.0 964982703 2000-07-30 18:45:03
# 1 1 3 4.0 964984247 2000-07-30 19:10:47
# 2 2 6 4.0 964982224 2000-07-30 18:37:04
# 3 2 47 5.0 964983815 2000-07-30 19:03:35
# 4 1 50 5.0 964982931 2000-07-30 18:48:51
df.dtypes
# UserID int64
# MovieID int64
# Rating float64
# Timestamp int64
# pdate datetime64[ns]
# dtype: object
# 1)实现数据统计 dt为时间类型
df_group = df.groupby([df['pdate'].dt.month, 'Rating'])['UserID'].agg(pv=np.sum)
df_group.head(20)
# pdate为月份
# pv
# pdate Rating
# 7 4.0 4
# 5.0 3
# 查看按月份,不同评分的次数趋势,是不行的。
# 需要将数据变换成每个评分是一列才可以实现的
# 2)使用unsack实现数据二维透视
# 目的:画图对比按照月份的不同评分的数量趋势
df_stack = df_group.unstack()
# pv
# Rating 4.0 5.0
# pdate
# 7 4 3
# unstack和stack是互逆操作
df_stack.stack().head()
# pv
# pdate Rating
# 7 4.0 4
# 5.0 3
# 3)使用pivot简化透视
df_group.head()
# pv
# pdate Rating
# 7 4.0 4
# 5.0 3
df_reset = df_group.reset_index()
df_reset
# pdate Rating pv
# 0 7 4.0 4
# 1 7 5.0 3
df_pivot = df_reset.pivot('pdate', 'Rating', 'pv')
df_pivot
# Rating 4.0 5.0
# pdate
# 7 4 3
# pivot方法相当于对df使用set_index创建分层索引,然后调用unstack
# 4)stack,unstack, pivot的语法
# stack:DataFrame.stack(level=-1, dropna=True),将column变成
# index,类似把横放的书籍变成竖放,level=-1代表多层索引的最内层,
# 可以通过==0,1,2指定多层索引的对应层
标签:5.0,Rating,4.0,df,pdate,Pandas,pivot,stack 来源: https://www.cnblogs.com/wangshuang57/p/15981266.html