其他分享
首页 > 其他分享> > Pandas_stack和pivot实现数据透视

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