• 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

  • 相关阅读:
    几种mesh 数据文件格式
    ceres之求解器
    EF Core03
    EF Core01
    网址收藏
    MediatR基础用法(事件)
    EF Core04
    日志系统Logging
    CSDN不登录复制代码
    WIN11 Windows Mobile 设备中心打开
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844921.html
Copyright © 2020-2023  润新知