zoukankan      html  css  js  c++  java
  • pandas_重采样多索引标准差协方差

    # 重采样 多索引 标准差 协方差
    import pandas as pd
    import numpy as np
    import copy
    
    # 设置列对齐
    pd.set_option("display.unicode.ambiguous_as_wide",True)
    pd.set_option("display.unicode.east_asian_width",True)
    
    data = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx')
    
    # 将日期设置为 python 中的日期类型
    data.日期 = pd.to_datetime(data.日期)
    '''
       工号  姓名                          日期         时段  交易额    柜台
    0  1001  张三 1970-01-01 00:00:00.020190301   9:00-14:00    2000  化妆品
    1  1002  李四 1970-01-01 00:00:00.020190301  14:00-21:00    1800  化妆品
    2  1003  王五 1970-01-01 00:00:00.020190301   9:00-14:00     800    食品
    '''
    # 每七天营业的总额
    data.resample('7D',on = '日期').sum()['交易额']
    '''
    日期
    1970-01-01    17410
    Freq: 7D, Name: 交易额, dtype: int64
    '''
    # 每七天营业总额
    data.resample('7D',on = '日期',label = 'right').sum()['交易额']
    '''
    日期
    1970-01-08    17410
    Freq: 7D, Name: 交易额, dtype: int64
    '''
    # 每七天营业额的平均值
    func = lambda item:round(np.sum(item)/len(item),2)
    data.resample('7D',on = '日期',label = 'right').apply(func)['交易额']
    '''
    日期
    1970-01-08    1024.12
    Freq: 7D, Name: 交易额, dtype: float64
    '''
    # 每七天营业额的平均值
    func = lambda num:round(num,2)
    data.resample('7D',on = '日期',label = 'right').mean().apply(func)['交易额']
    # 1024.12
    
    # 删除工号这一列
    data.drop('工号',axis = 1,inplace = True)
    data[:2]
    '''
       姓名                          日期         时段  交易额    柜台
    0  张三 1970-01-01 00:00:00.020190301   9:00-14:00    2000  化妆品
    1  李四 1970-01-01 00:00:00.020190301  14:00-21:00    1800  化妆品
    '''
    # 按照姓名和柜台进行分组汇总
    data = data.groupby(by = ['姓名','柜台']).sum()[:3]
    '''
                   交易额
    姓名 柜台            
    周七 日用品      1180
    张三 化妆品      4600
         蔬菜水果     600
    '''
    # 查看张三的汇总数据
    data.loc['张三',:]
    '''
              交易额
    柜台            
    化妆品      4600
    蔬菜水果     600
    '''
    # 查看张三在蔬菜水果的交易数据
    data.loc['张三','蔬菜水果']
    '''
    交易额    600
    Name: (张三, 蔬菜水果), dtype: int64
    '''
    # 多索引
    # 重新读取,使用第二列和第六列作为索引,排在前面
    data = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx',index_col = [1,5])
    data[:5]
    '''
                 工号      日期         时段  交易额
    姓名 柜台                                       
    张三 化妆品  1001  20190301   9:00-14:00    2000
    李四 化妆品  1002  20190301  14:00-21:00    1800
    王五 食品    1003  20190301   9:00-14:00     800
    赵六 食品    1004  20190301  14:00-21:00    1100
    周七 日用品  1005  20190301   9:00-14:00     600
    '''
    # 丢弃工号列
    data.drop('工号',axis = 1,inplace = True)
    data[:5]
    '''
                 日期         时段  交易额
    姓名 柜台                                 
    张三 化妆品  20190301   9:00-14:00    2000
    李四 化妆品  20190301  14:00-21:00    1800
    王五 食品    20190301   9:00-14:00     800
    赵六 食品    20190301  14:00-21:00    1100
    周七 日用品  20190301   9:00-14:00     600
    '''
    # 按照柜台进行排序
    dff = data.sort_index(level = '柜台',axis = 0)
    dff[:5]
    '''
                 工号      日期         时段  交易额
    姓名 柜台                                       
    张三 化妆品  1001  20190301   9:00-14:00    2000
         化妆品  1001  20190302   9:00-14:00    1300
         化妆品  1001  20190303   9:00-14:00    1300
    李四 化妆品  1002  20190301  14:00-21:00    1800
         化妆品  1002  20190302  14:00-21:00    1500
    '''
    # 按照姓名进行排序
    dff = data.sort_index(level = '姓名',axis = 0)
    dff[:5]
    '''
                 工号      日期        时段  交易额
    姓名 柜台                                      
    周七 日用品  1005  20190301  9:00-14:00     600
         日用品  1005  20190302  9:00-14:00     580
    张三 化妆品  1001  20190301  9:00-14:00    2000
         化妆品  1001  20190302  9:00-14:00    1300
         化妆品  1001  20190303  9:00-14:00    1300
    '''
    # 按照柜台进行分组求和
    dff = data.groupby(level = '柜台').sum()['交易额']
    '''
    柜台
    化妆品      7900
    日用品      2600
    蔬菜水果    2960
    食品        3950
    Name: 交易额, dtype: int64
    '''
    #标准差
    data = pd.DataFrame({'A':[3,3,3,3,3],'B':[1,2,3,4,5],
                         'C':[-5,-4,1,4,5],'D':[-45,15,63,40,50]
                         })
    '''
       A  B  C   D
    0  3  1 -5 -45
    1  3  2 -4  15
    2  3  3  1  63
    3  3  4  4  40
    4  3  5  5  50
    '''
    # 平均值
    data.mean()
    '''
    A     3.0
    B     3.0
    C     0.2
    D    24.6
    dtype: float64
    '''
    # 标准差
    data.std()
    '''
    A     0.000000
    B     1.581139
    C     4.549725
    D    42.700117
    dtype: float64
    '''
    # 标准差的平方
    data.std()**2
    '''
    A       0.0
    B       2.5
    C      20.7
    D    1823.3
    dtype: float64
    '''
    # 协方差
    data.cov()
    '''
         A      B       C        D
    A  0.0   0.00    0.00     0.00
    B  0.0   2.50    7.00    53.75
    C  0.0   7.00   20.70   153.35
    D  0.0  53.75  153.35  1823.30
    '''
    # 指定索引为 姓名,日期,时段,柜台,交易额
    data = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx',
                         usecols = ['姓名','日期','时段','柜台','交易额'])
    # 删除缺失值和重复值,inplace = True 直接丢弃
    data.dropna(inplace = True)
    data.drop_duplicates(inplace = True)
    
    # 处理异常值
    data.loc[data.交易额 < 200,'交易额'] = 200
    data.loc[data.交易额 > 3000,'交易额'] = 3000
    
    # 使用交叉表得到不同员工在不同柜台的交易额平均值
    dff = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = 'mean')
    dff[:5]
    '''
    柜台       化妆品  日用品  蔬菜水果    食品
    姓名                                       
    周七          NaN   590.0       NaN     NaN
    张三  1533.333333     NaN     600.0     NaN
    李四  1650.000000     NaN     680.0     NaN
    王五          NaN     NaN     830.0   900.0
    赵六          NaN     NaN       NaN  1075.0
    '''
    # 查看数据的标准差
    dff.std()
    '''
    柜台
    化妆品       82.495791
    日用品       84.852814
    蔬菜水果    120.277457
    食品        123.743687
    dtype: float64
    '''
    # 协方差
    dff.cov()
    '''
    柜台           化妆品  日用品      蔬菜水果     食品
    柜台                                                
    化妆品    6805.555556     NaN   4666.666667      NaN
    日用品            NaN  7200.0           NaN      NaN
    蔬菜水果  4666.666667     NaN  14466.666667      NaN
    食品              NaN     NaN           NaN  15312.5
    '''

    2020-05-07

  • 相关阅读:
    云笔记项目-Spring事务学习-传播Requried
    云笔记项目-Spring事务学习_测试准备
    云笔记项目-AOP知识简单学习
    云笔记项目-过滤器与拦截器学习
    云笔记项目-Java反射知识学习
    云笔记项目-补充JS面向对象编程基础知识
    云笔记项目-移动笔记后高亮显示笔记本和笔记
    算法-第四版-练习1.3.16解答
    Redis相关的内核参数解释与设置
    算法-第四版-练习1.3.17解答
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844921.html
Copyright © 2011-2022 走看看