其他分享
首页 > 其他分享> > pandas_重采样多索引标准差协方差

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:\Users\lenovo\Desktop\总结\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:\Users\lenovo\Desktop\总结\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:\Users\lenovo\Desktop\总结\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

标签:00,交易额,14,柜台,NaN,协方差,标准差,data,pandas
来源: https://www.cnblogs.com/hany-postq473111315/p/12844921.html